瀏覽代碼

Merged requi item grids together

Kenric Nugteren 1 年之前
父節點
當前提交
a04af716e1

+ 77 - 23
prs.desktop/Panels/Requisitions/RequisitionItemGrid.cs

@@ -2,10 +2,13 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media.Imaging;
 using Comal.Classes;
 using InABox.Clients;
 using InABox.Core;
 using InABox.DynamicGrid;
+using InABox.Wpf;
 using InABox.WPF;
 using Microsoft.Office.Interop.Outlook;
 using Syncfusion.Windows.Tools.Controls;
@@ -17,7 +20,7 @@ namespace PRSDesktop
     {
         //public int Boxes { get; set; }
 
-        public bool Picked = true;
+        private static readonly BitmapImage tick = PRSDesktop.Resources.tick.AsBitmapImage();
 
         public RequisitionItemGrid()
         {
@@ -54,12 +57,75 @@ namespace PRSDesktop
             HiddenColumns.Add(x => x.Style.ID);
             HiddenColumns.Add(x => x.Style.Code);
             HiddenColumns.Add(x => x.Picked);
+            ActionColumns.Add(new DynamicImageColumn(Pick_Image, Pick_Click)
+            {
+                ToolTip = Pick_ToolTip
+            });
             ActionColumns.Add(new DynamicMenuColumn(SelectHolding,
                 (row) => (row.Get<RequisitionItem, Guid>(c => c.Product.ID) == Guid.Empty) || row.Get<RequisitionItem, bool>(c => c.Product.NonStock) == true
                     ? DynamicMenuStatus.Hidden
                     : DynamicMenuStatus.Enabled)
             );
         }
+
+        private FrameworkElement? Pick_ToolTip(DynamicActionColumn column, CoreRow? row)
+        {
+            string content;
+            if (row is null)
+            {
+                content = "Has this item been picked?";
+            }
+            else
+            {
+                if(!row.Get<RequisitionItem, DateTime>(x => x.Picked).IsEmpty())
+                {
+                    content = "This item has been picked";
+                }
+                else
+                {
+                    content = "This item has not been picked";
+                }
+            }
+            return column.TextToolTip(content);
+        }
+
+        private BitmapImage? Pick_Image(CoreRow? row)
+        {
+            return row is null
+                ? tick
+                : (row.Get<RequisitionItem, DateTime>(x => x.Picked).IsEmpty()
+                    ? null
+                    : tick);
+        }
+
+        private bool Pick_Click(CoreRow? row)
+        {
+            if(row is null)
+            {
+                return false;
+            }
+
+            var reqItem = row.ToObject<RequisitionItem>();
+            ProcessItems(reqItem.Picked.IsEmpty() ? DateTime.Now : DateTime.MinValue, CoreUtils.One(reqItem));
+            return true;
+        }
+
+        private static void ProcessItems(DateTime picked, IEnumerable<RequisitionItem> items)
+        {
+            var list = new List<RequisitionItem>();
+            foreach (var item in items)
+            {
+                item.Picked = picked;
+                list.Add(item);
+            }
+            string audittrail;
+            if (picked == DateTime.MinValue)
+                audittrail = "Item unpicked";
+            else
+                audittrail = "Item picked " + picked.ToString("dd MMM yy");
+            Client.Save(list, audittrail);
+        }
+
         protected override void DoReconfigure(FluentList<DynamicGridOption> options)
         {
             base.DoReconfigure(options);
@@ -75,14 +141,6 @@ namespace PRSDesktop
                 .EndUpdate();
         }
 
-        protected override void DoBeforeSave(IDynamicEditorForm editor, RequisitionItem[] items)
-        {
-            base.DoBeforeSave(editor, items);
-
-            foreach (var item in items)
-                item.Picked = Picked ? DateTime.Now : DateTime.MinValue;
-        }
-
         private bool CanAddItems() =>
             Requisition is not null && Requisition.ID != Guid.Empty && Requisition.Filled.IsEmpty();
 
@@ -119,7 +177,7 @@ namespace PRSDesktop
                             item.Product.ID = product.ID;
                             item.Product.Synchronise(product);
                             item.Quantity = quantity;
-                            item.Picked = Picked ? DateTime.Now : DateTime.MinValue;
+                            item.Picked = DateTime.MinValue;
                             SaveItem(item);
                             Refresh(false, true);
                         }
@@ -130,8 +188,13 @@ namespace PRSDesktop
 
         private void SelectHolding(DynamicMenuColumn column, CoreRow? row)
         {
-            List<Guid> locations = new List<Guid>();
-            var holdings = new Client<StockHolding>().Query(
+            if(row is null)
+            {
+                return;
+            }
+
+            var locations = new List<Guid>();
+            var holdings = Client.Query(
                 new Filter<StockHolding>(x => x.Product.ID).IsEqualTo(row.Get<RequisitionItem, Guid>(c => c.Product.ID)),
                 new Columns<StockHolding>(x => x.Location.ID)
                     .Add(x => x.Units));
@@ -145,7 +208,7 @@ namespace PRSDesktop
 
             if (locations.Count == 0)
             {
-                MessageBox.Show("No valid holdings found for product");
+                MessageWindow.ShowMessage("No valid holdings found for product", "No holdings");
                 return;
             }
 
@@ -210,22 +273,13 @@ namespace PRSDesktop
             criteria.Add(
                 new Filter<RequisitionItem>(x => x.RequisitionLink.ID).IsEqualTo(Requisition != null ? Requisition.ID : CoreUtils.FullGuid));
 
-            if (Picked)
-                criteria.Add(new Filter<RequisitionItem>(x => x.Picked).IsNotEqualTo(DateTime.MinValue));
-            else
-                criteria.Add(new Filter<RequisitionItem>(x => x.Picked).IsEqualTo(DateTime.MinValue));
-
             sort = new SortOrder<RequisitionItem>(x => x.Created);
 
             base.Reload(
                 criteria,
                 columns,
                 ref sort,
-                (o, e) =>
-                {
-                    // Update Buttons Here
-                    action.Invoke(o, e);
-                }
+                action
             );
         }
 

+ 4 - 28
prs.desktop/Panels/Requisitions/RequisitionPanel.xaml

@@ -12,8 +12,6 @@
             <ColumnDefinition Width="450" />
             <ColumnDefinition Width="Auto" />
             <ColumnDefinition Width="*" />
-            <ColumnDefinition Width="Auto" />
-            <ColumnDefinition Width="*" />
             <ColumnDefinition Width="450" />
         </Grid.ColumnDefinitions>
         <Grid.RowDefinitions>
@@ -31,40 +29,18 @@
        
         <Border Grid.Row="0" Grid.Column="2" Margin="0,0,0,2" BorderBrush="Gray" BorderThickness="0.75"
                 CornerRadius="5,5,0,0" Background="WhiteSmoke">
-            <Label Content="Requested Items" VerticalContentAlignment="Center"
-                   HorizontalContentAlignment="Center" />
-        </Border>
-        <local:RequisitionItemGrid x:Name="UnPickedItems" Grid.Row="1" Grid.Column="2" />
-
-        <Grid Grid.Row="1" Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center">
-            <Grid.RowDefinitions>
-                <RowDefinition Height="auto"/>
-                <RowDefinition Height="auto"/>
-                <RowDefinition Height="500"/>
-            </Grid.RowDefinitions>
-            <Button Grid.Row="0" Margin="2,2,2,5" Click="PickItems_Click">
-                <Image Source="pack://application:,,,/Resources/rightarrow.png"/>
-            </Button>
-            <Button Grid.Row="1" Margin="2,5,2,2" Click="UnPickItems_Click">
-                <Image Source="pack://application:,,,/Resources/leftarrow.png"/>
-            </Button>
-               
-        </Grid>
-
-        <Border Grid.Row="0" Grid.Column="4" Margin="0,0,0,2" BorderBrush="Gray" BorderThickness="0.75"
-                CornerRadius="5,5,0,0" Background="WhiteSmoke">
-            <Label Content="Picked Items" VerticalContentAlignment="Center"
+            <Label Content="Items" VerticalContentAlignment="Center"
                    HorizontalContentAlignment="Center"/>
         </Border>
-        <local:RequisitionItemGrid x:Name="Items" Grid.Row="1" Grid.Column="4" />
+        <local:RequisitionItemGrid x:Name="Items" Grid.Row="1" Grid.Column="2" />
 
 
-        <Border Grid.Row="0" Grid.Column="5" Margin="4,0,0,2" BorderBrush="Gray" BorderThickness="0.75"
+        <Border Grid.Row="0" Grid.Column="3" Margin="4,0,0,2" BorderBrush="Gray" BorderThickness="0.75"
                 CornerRadius="5,5,0,0" Background="WhiteSmoke">
             <Label Content="Requisition Details" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" />
         </Border>
 
-        <Border BorderBrush="DarkGray" BorderThickness="1" Grid.Column="5" Grid.Row="1" Margin="4,0,0,2"
+        <Border BorderBrush="DarkGray" BorderThickness="1" Grid.Column="3" Grid.Row="1" Margin="4,0,0,2"
                 Padding="0,0,0,5">
             <Grid>
                 <Grid.RowDefinitions>

+ 0 - 42
prs.desktop/Panels/Requisitions/RequisitionPanel.xaml.cs

@@ -58,9 +58,6 @@ namespace PRSDesktop
             //Requisitions.OnRequisitionFillStateChanged += Requisitions_OnRequisitionFillStateChanged;
             //Requisitions.OnRequisitionBoxesChanged += Requisitions_OnRequisitionBoxesChanged;
 
-            UnPickedItems.Picked = false;
-            UnPickedItems.Refresh(true, true);
-
             SetupScanner();
 
             Items.Reconfigure(options =>
@@ -335,8 +332,6 @@ namespace PRSDesktop
         {
             _requisition = e.Rows?.FirstOrDefault()?.ToObject<Requisition>();
             LoadRequisition();
-            UnPickedItems.Requisition = _requisition;
-            UnPickedItems.Refresh(false, true);
             Items.Requisition = _requisition;
             Items.Refresh(false, true);
             //lastselection = DateTime.Now;
@@ -485,42 +480,5 @@ namespace PRSDesktop
 
             Progress.Close();
         }
-
-
-        private void PickItems_Click(object sender, RoutedEventArgs e)
-        {
-            if (!UnPickedItems.SelectedRows.Any())
-                return;
-
-            ProcessItems(DateTime.Now, UnPickedItems.SelectedRows);
-        }
-
-        private void UnPickItems_Click(object sender, RoutedEventArgs e)
-        {
-            if (!Items.SelectedRows.Any())
-                return;
-
-            ProcessItems(DateTime.MinValue, Items.SelectedRows);
-        }
-
-        private void ProcessItems(DateTime picked, CoreRow[] rows)
-        {
-            var list = new List<RequisitionItem>();
-            foreach (CoreRow row in rows)
-            {
-                var item = row.ToObject<RequisitionItem>();
-                item.Picked = picked;
-                list.Add(item);
-            }
-            string audittrail;
-            if (picked == DateTime.MinValue)
-                audittrail = "Item unpicked";
-            else
-                audittrail = "Item picked " + picked.ToString("dd MMM yy");
-            new Client<RequisitionItem>().Save(list, audittrail);
-
-            UnPickedItems.Refresh(false, true);
-            Items.Refresh(false, true);
-        }
     }
 }