浏览代码

PRS DESKTOP - job requisition panel continued building

Nick-PRSDigital@bitbucket.org 2 年之前
父节点
当前提交
d05b5842f6

+ 33 - 7
prs.desktop/JobRequisitionHoldingsReview.xaml

@@ -20,25 +20,51 @@
                 <ColumnDefinition Width="*"/>
             </Grid.ColumnDefinitions>
             <TextBlock Grid.Column="0" Text="Job" HorizontalAlignment="Center"/>
-            <TextBlock Grid.Column="1" x:Name="CurrentStyleText" HorizontalAlignment="Center"/>
-            <TextBlock Grid.Column="2" Text="Stock of Mill/No Style" HorizontalAlignment="Center"/>
+            <TextBlock Grid.Column="1" x:Name="CurrentStyleText" HorizontalAlignment="Center" TextWrapping="Wrap"/>
+            <TextBlock Grid.Column="2" Text="No Style" HorizontalAlignment="Center"/>
             <TextBlock Grid.Column="3" Text="Other Styles" HorizontalAlignment="Center"/>
         </Grid>
 
         <ListView x:Name="listView" Grid.Row="1" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
             <ListView.ItemTemplate>
                 <DataTemplate>
-                    <Grid HorizontalAlignment="Stretch">
+                    <Grid HorizontalAlignment="Stretch" Background="{Binding Background}">
                         <Grid.ColumnDefinitions>
                             <ColumnDefinition Width="*"/>
                             <ColumnDefinition Width="*"/>
                             <ColumnDefinition Width="*"/>
                             <ColumnDefinition Width="*"/>
                         </Grid.ColumnDefinitions>
-                        <TextBlock Grid.Column="0" HorizontalAlignment="Center" Text="{Binding JobName}"/>
-                        <local:JobRequisitionTakeStockUserControl Grid.Column="1" HorizontalAlignment="Center" Value="100"/>
-                        <local:JobRequisitionTakeStockUserControl Grid.Column="2" HorizontalAlignment="Center" Value="100"/>
-                        <local:JobRequisitionTakeStockUserControl Grid.Column="3" HorizontalAlignment="Center" Value="100"/>
+                        
+                        <TextBlock Grid.Column="0" HorizontalAlignment="Center" Text="{Binding JobName}" TextWrapping="Wrap"/>
+                        
+                        <Grid Grid.Column="1">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="*"/>
+                                <ColumnDefinition Width="*"/>
+                            </Grid.ColumnDefinitions>
+                            <TextBlock Grid.Column="0" Text="{Binding StockOfCurrentStyle}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0, 0, 5, 0"/>
+                            <Button Grid.Column="1" Content="Take" Click="Button_Click" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                        </Grid>
+
+                        <Grid Grid.Column="2">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="*"/>
+                                <ColumnDefinition Width="*"/>
+                            </Grid.ColumnDefinitions>
+                            <TextBlock Grid.Column="0" Text="{Binding StockOfNoStyle}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0, 0, 5, 0"/>
+                            <Button Grid.Column="1" Content="Take" Click="Button_Click" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                        </Grid>
+
+                        <Grid Grid.Column="3">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="*"/>
+                                <ColumnDefinition Width="*"/>
+                            </Grid.ColumnDefinitions>
+                            <TextBlock Grid.Column="0" Text="{Binding StockOfOtherStyles}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0, 0, 5, 0"/>
+                            <Button Grid.Column="1" Content="Take" Click="Button_Click" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                        </Grid>
+                        
                     </Grid>
                 </DataTemplate>
             </ListView.ItemTemplate>

+ 171 - 11
prs.desktop/JobRequisitionHoldingsReview.xaml.cs

@@ -1,4 +1,10 @@
-using System;
+using Comal.Classes;
+using InABox.Clients;
+using InABox.Core;
+using java.awt.@event;
+using net.sf.mpxj;
+using Syncfusion.UI.Xaml.Diagram.Theming;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -20,28 +26,182 @@ namespace PRSDesktop
     /// </summary>
     public partial class JobRequisitionHoldingsReview : UserControl
     {
+        List<Job> jobs = new List<Job>();
+
+        private JobRequisitionItem item;
+        public JobRequisitionItem Item
+        {
+            get
+            {
+                return item;
+            }
+            set
+            {
+                item = value;
+                SetHoldings();
+                SetStyle();
+            }
+        }
+
+        private void SetStyle()
+        {
+            if (Item.Style.ID != Guid.Empty)
+                CurrentStyleText.Text = Item.Style.Description + " (" + Item.Style.Code + ")";
+            else
+                CurrentStyleText.Text = "";
+        }
+
         public JobRequisitionHoldingsReview()
         {
             InitializeComponent();
-
-            List<JobRequiHoldingsReviewModel> list = new List<JobRequiHoldingsReviewModel>()             
+            CoreTable table = new Client<Job>().Query(null, new Columns<Job>(x => x.ID, x => x.JobNumber));
+            foreach (var row in table.Rows)
             {
-                new JobRequiHoldingsReviewModel() {JobName = "A"},
-                new JobRequiHoldingsReviewModel() {JobName = "B"},
-                new JobRequiHoldingsReviewModel() {JobName = "C"},
-                new JobRequiHoldingsReviewModel() {JobName = "D"},
-            };
+                jobs.Add(row.ToObject<Job>());
+            }
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
 
+        private void SetHoldings()
+        {
+            CoreTable table = new Client<StockMovement>().Query(new Filter<StockMovement>(x => x.Product.ID).IsEqualTo(item.Product.ID),
+                new Columns<StockMovement>(
+                    x => x.Style.ID,
+                    x => x.Received,
+                    x => x.Issued,
+                    x => x.Location.ID,
+                    x => x.Job.ID,
+                    x => x.JobRequisitionItem.ID
+                    ));
+            List<StockMovement> stockMovements = new List<StockMovement>();
+
+            foreach (CoreRow row in table.Rows)
+                stockMovements.Add(row.ToObject<StockMovement>());
+
+            List<JobRequiHoldingsReviewModel> list = new List<JobRequiHoldingsReviewModel>();
+            list.Add(SetHoldingsForJob(stockMovements));
+            list.Add(SetHoldingsForFreeStock(stockMovements));
+            list.AddRange(GetNonRequiHoldingsForOtherJobs(stockMovements));
             listView.ItemsSource = list;
+        } 
+
+        private JobRequiHoldingsReviewModel SetHoldingsForJob(List<StockMovement> mvts)
+        {
+            var currentJobHoldings = new JobRequiHoldingsReviewModel(item.Job.JobNumber + " (Not previously requi-ed)");
+            currentJobHoldings.GetStock(item.Job.ID, item.Style.ID, item.Product.ID, mvts);
+            currentJobHoldings.Background = new SolidColorBrush(Colors.LightGreen);
+            return currentJobHoldings;
+        }
+
+        private JobRequiHoldingsReviewModel SetHoldingsForFreeStock(List<StockMovement> mvts)
+        {
+            var freeStock = new JobRequiHoldingsReviewModel("Free Stock (no job)");
+            freeStock.GetStock(Guid.Empty, item.Style.ID, item.Product.ID, mvts);
+            freeStock.Background = new SolidColorBrush(Colors.LightGreen);
+            return freeStock;
+        }
+
+        private IEnumerable<JobRequiHoldingsReviewModel> GetNonRequiHoldingsForOtherJobs(List<StockMovement> mvts)
+        {
+            var list = new List<JobRequiHoldingsReviewModel>();
+            foreach (var job in jobs)
+            {
+                if (job.ID == item.Job.ID)
+                    continue;
+
+                var holdings = new JobRequiHoldingsReviewModel(job.JobNumber);
+                holdings.GetStock(job.ID, item.Style.ID, item.Product.ID, mvts);
+
+                if (holdings.StockOfCurrentStyle == 0 && holdings.StockOfNoStyle == 0 && holdings.StockOfOtherStyles == 0)
+                    continue;
+
+                holdings.Background = new SolidColorBrush(Colors.Cornsilk);
+                list.Add(holdings);
+            }
+            return list;
         }
     }
 
     public class JobRequiHoldingsReviewModel
-    { 
+    {
         public string JobName { get; set; }
-        public JobRequiHoldingsReviewModel() 
+        public double StockOfCurrentStyle { get; set; }
+        public double StockOfNoStyle { get; set; }
+        public double StockOfOtherStyles { get; set; }
+
+        public Brush Background { get; set; }
+
+        Columns<StockMovement> columns = new Columns<StockMovement>(x => x.Received, x => x.Issued);
+
+        public JobRequiHoldingsReviewModel(string jobname)
+        {
+            JobName = jobname;
+        }
+
+        public void GetStock(Guid jobid, Guid styleid, Guid productid, List<StockMovement> movements, bool bIncludeRequied = false)
+        {
+            GetStockOfCurrentStyle(jobid, styleid, movements, bIncludeRequied);
+            GetStockOfNoStyle(jobid, movements, bIncludeRequied);
+            GetStockOfOtherStyles(jobid, styleid, movements, bIncludeRequied);
+        }
+
+        private void GetStockOfOtherStyles(Guid jobid, Guid styleid, List<StockMovement> movements, bool bIncludeRequied)
+        {
+            var mvts = movements
+                .Where(x => x.Job.ID == jobid)
+                .Where(x => x.Style.ID != Guid.Empty)
+                .Where(x => x.Style.ID != styleid)
+                .Where(x => x.JobRequisitionItem.ID == Guid.Empty);
+
+            StockOfOtherStyles = CalculateTotal(mvts);
+        }
+
+        private void GetStockOfNoStyle(Guid jobid, List<StockMovement> movements, bool bIncludeRequied)
         {
-            JobName = "";
+            var mvts = movements
+                .Where(x => x.Job.ID == jobid)
+                .Where(x => x.Style.ID == Guid.Empty)
+                .Where(x => x.JobRequisitionItem.ID == Guid.Empty);
+
+            StockOfNoStyle = CalculateTotal(mvts);
+        }
+
+        private void GetStockOfCurrentStyle(Guid jobid, Guid styleid, List<StockMovement> movements, bool bIncludeRequied)
+        {
+            if (styleid == Guid.Empty)
+                return;
+
+            var mvts = movements
+                .Where(x => x.Job.ID == jobid)
+                .Where(x => x.Style.ID == styleid)
+                .Where(x => x.JobRequisitionItem.ID == Guid.Empty);
+
+            StockOfCurrentStyle = CalculateTotal(mvts);
+        }
+
+        private double CalculateTotal(IEnumerable<StockMovement> mvts)
+        {
+            double total = 0;
+
+            double rec = 0;
+            double issued = 0;
+
+            foreach (var sm in mvts)
+            {
+                if (sm.Received != 0)
+                    rec = rec + sm.Received;
+                else if (sm.Issued != 0)
+                    issued = issued + sm.Issued;
+            }
+
+            if (rec >= issued)
+                total = rec - issued;
+
+            return total;
         }
     }
 }

+ 8 - 2
prs.desktop/Panels/Jobs/JobRequisitionPanel.xaml.cs

@@ -1,10 +1,16 @@
 using System;
 using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
 using System.Linq;
 using System.Windows.Controls;
+using com.healthmarketscience.jackcess.impl;
 using Comal.Classes;
+using InABox.Clients;
 using InABox.Core;
 using InABox.DynamicGrid;
+using Syncfusion.Pdf.Parsing;
 
 namespace PRSDesktop
 {
@@ -28,7 +34,7 @@ namespace PRSDesktop
                 Items.JobID = value;
             }
         }
-        
+
         public JobPanelSettings Settings { get; set; }
 
         public bool IsReady { get; set; }
@@ -43,7 +49,7 @@ namespace PRSDesktop
         public void Setup()
         {
             Requisitions.Refresh(true, false);
-            Items.Refresh(true, false);
+            Items.Refresh(true, false);            
         }
 
         public void Shutdown()

+ 16 - 14
prs.desktop/Panels/Products/Job Requisitions/JobRequisitionReviewGrid.cs

@@ -55,6 +55,8 @@ namespace PRSDesktop
             HiddenColumns.Add(x => x.PurchaseOrderItem.PurchaseOrderLink.PONumber);
             HiddenColumns.Add(x => x.PurchaseOrderItem.DueDate);
             HiddenColumns.Add(x => x.Job.ID);
+            HiddenColumns.Add(x => x.Job.Name);
+            HiddenColumns.Add(x => x.Job.JobNumber);
             HiddenColumns.Add(x => x.Dimensions.UnitSize);
             HiddenColumns.Add(x => x.Dimensions.Length);
             HiddenColumns.Add(x => x.Dimensions.Width);
@@ -180,20 +182,20 @@ namespace PRSDesktop
         protected override DynamicGridStyle GetRowStyle(CoreRow row, DynamicGridStyle style)
         {
             var result = base.GetRowStyle(row, style);
-            var item = row.ToObject<JobRequisitionItem>();
-            if (item.Status == JobRequisitionItemStatus.NotChecked)
-            {
-                var rowstyle = new DynamicGridRowStyle();
-                rowstyle.Background = new SolidColorBrush(Colors.LightSalmon);
-                return rowstyle;
-            }
-
-            if (item.Status == JobRequisitionItemStatus.OrderRequired)
-            {
-                var rowstyle = new DynamicGridRowStyle();
-                rowstyle.Background = new SolidColorBrush(Colors.LightCoral);
-                return rowstyle;
-            }
+            //var item = row.ToObject<JobRequisitionItem>();
+            //if (item.Status == JobRequisitionItemStatus.NotChecked)
+            //{
+            //    var rowstyle = new DynamicGridRowStyle();
+            //    rowstyle.Background = new SolidColorBrush(Colors.LightSalmon);
+            //    return rowstyle;
+            //}
+
+            //if (item.Status == JobRequisitionItemStatus.OrderRequired)
+            //{
+            //    var rowstyle = new DynamicGridRowStyle();
+            //    rowstyle.Background = new SolidColorBrush(Colors.LightCoral);
+            //    return rowstyle;
+            //}
 
             return result;
         }

+ 1 - 1
prs.desktop/Panels/Products/Job Requisitions/JobRequisitionsPanel.xaml

@@ -26,7 +26,7 @@
         </dynamicgrid:DynamicSplitPanel.DetailHeader>
 
         <dynamicgrid:DynamicSplitPanel.Detail>
-            <local:JobRequisitionHoldingsReview Margin="0,2,0,0"/>
+            <local:JobRequisitionHoldingsReview x:Name="holdings" Margin="0,2,0,0"/>
         </dynamicgrid:DynamicSplitPanel.Detail>
 
     </dynamicgrid:DynamicSplitPanel>

+ 69 - 5
prs.desktop/Panels/Products/Job Requisitions/JobRequisitionsPanel.xaml.cs

@@ -1,8 +1,12 @@
 using com.sun.tools.javac.file;
 using Comal.Classes;
+using InABox.Configuration;
 using InABox.Core;
+using InABox.DynamicGrid;
+using InABox.WPF;
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -18,12 +22,24 @@ using System.Windows.Shapes;
 
 namespace PRSDesktop
 {
+    public class ProductPanelSettings : BaseObject, IGlobalConfigurationSettings
+    {
+        [Caption("Default Style for Company", IncludePath = false)]
+        public ProductStyleLink ProductStyle { get; set; }
+
+        public ProductPanelSettings()
+        {
+            ProductStyle = new ProductStyleLink();
+        }
+    }
+
     /// <summary>
     /// Interaction logic for JobRequisitionsPanel.xaml
     /// </summary>
     public partial class JobRequisitionsPanel : UserControl, IPanel<JobRequisitionItem>
     {
         Guid JobID = Guid.Empty;
+        private ProductPanelSettings _settings = null;
         public JobRequisitionsPanel()
         {
             InitializeComponent();
@@ -37,7 +53,43 @@ namespace PRSDesktop
 
         public void CreateToolbarButtons(IPanelHost host)
         {
+            host.CreateSetupAction(new PanelAction() { Caption = "Product Configuration Settings", Image = PRSDesktop.Resources.specifications, OnExecute = ConfigSettingsClick });
+        }
+
+        private void ConfigSettingsClick(PanelAction obj)
+        {
+            var pages = new DynamicEditorPages();
+            var buttons = new DynamicEditorButtons();
+            buttons.Add(
+                "",
+                PRSDesktop.Resources.help.AsBitmapImage(),
+                _settings,
+                (f, i) =>
+                {
+                    Process.Start(new ProcessStartInfo("https://prsdigital.com.au/wiki/index.php/" + typeof(Equipment).Name.SplitCamelCase().Replace(" ", "_"))
+                    { UseShellExecute = true });
+                }
+            );
+            var propertyEditor = new DynamicEditorForm(typeof(ProductPanelSettings), pages, buttons);
+            propertyEditor.OnDefineLookups += sender =>
+            {
+                var editor = sender.EditorDefinition as ILookupEditor;
+                var colname = sender.ColumnName;
+                var values = editor.Values(colname, new[] { _settings });
+                sender.LoadLookups(values);
+            };
+            propertyEditor.OnEditorValueChanged += (sender, name, value) =>
+            {
+                CoreUtils.SetPropertyValue(_settings, name, value);
+                return new Dictionary<string, object?>();
+            };
+
+            propertyEditor.Items = new BaseObject[] { _settings };
 
+            if (propertyEditor.ShowDialog() == true)
+            {
+                new GlobalConfiguration<ProductPanelSettings>().Save(_settings);
+            }
         }
 
         public DataModel DataModel(Selection selection)
@@ -66,13 +118,17 @@ namespace PRSDesktop
         public void Setup()
         {
             SetupJobRequiItemGrids();
+            Task.Run(() =>
+            {
+                _settings = new GlobalConfiguration<ProductPanelSettings>().Load();
+            });
         }
 
-        
+
 
         private void RefreshJobRequiGrids()
         {
-            unProcessedJobRequiItems.bRefreshing = false;           
+            unProcessedJobRequiItems.bRefreshing = false;
             unProcessedJobRequiItems.Refresh(false, true);
         }
 
@@ -84,21 +140,29 @@ namespace PRSDesktop
         private void SetupJobRequiItemGrids()
         {
             unProcessedJobRequiItems.OnGridRefresh += JobRequiItems_OnGridRefresh;
-    
-            unProcessedJobRequiItems.OnReload += (object sender, Filters<JobRequisitionItem> criteria, Columns<JobRequisitionItem> columns, ref SortOrder<JobRequisitionItem>? sortby) => 
+
+            unProcessedJobRequiItems.OnReload += (object sender, Filters<JobRequisitionItem> criteria, Columns<JobRequisitionItem> columns, ref SortOrder<JobRequisitionItem>? sortby) =>
             {
                 criteria.Add(new Filter<JobRequisitionItem>(x => x.Status).IsEqualTo(JobRequisitionItemStatus.NotChecked));
             };
 
+            unProcessedJobRequiItems.OnJobRequiItemSelected += OnJobRequiItemSelected;
+
             unProcessedJobRequiItems.Refresh(true, true);
         }
 
+        private void OnJobRequiItemSelected(JobRequisitionItem item)
+        {
+            holdings.Item = item;
+
+        }
+
         private void JobRequiItems_OnGridRefresh()
         {
             RefreshJobRequiGrids();
         }
 
-       
+
         public void Shutdown()
         {