Просмотр исходного кода

PRS DESKTOP - upgrades to Job Requisition module (further split screen + sort by job grid)

Nick-PRSDigital@bitbucket.org 2 лет назад
Родитель
Сommit
d6a7abb3af

+ 38 - 1
prs.desktop/Panels/Products/Job Requisitions/JobRequisitionReviewGrid.cs

@@ -25,6 +25,7 @@ namespace PRSDesktop
         string empName = "";
         bool bIncludeArchived = false;
         bool bViewCancelled = false;
+        public Guid JobID = Guid.Empty;
 
         public JobRequisitionReviewGrid()
         {
@@ -79,7 +80,7 @@ namespace PRSDesktop
 
             AddButton("Include Archived", null, ViewArchived);
             AddButton("Include Cancelled", null, ViewCancelled);
-            
+
             OnSelectItem += JobRequisitionReviewGrid_OnSelectItem;
 
             ColumnsTag = "JobRequisitionReview";
@@ -92,6 +93,27 @@ 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;
+            }
+
+            return result;
+        }
+
         private void JobRequisitionReviewGrid_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
         {
             OnJobRequiItemSelected?.Invoke(SelectedRows[0].ToObject<JobRequisitionItem>());
@@ -183,6 +205,15 @@ namespace PRSDesktop
             return valid;
         }
 
+        private void MarkReserved_Clicked(CoreRow? row)
+        {
+            JobRequisitionItem item = row.ToObject<JobRequisitionItem>();
+            if (CheckValidAction(item, false))
+            {
+                SaveRow(row, JobRequisitionItemStatus.Reserved, "Line marked as Reserved by " + empName + " on " + DateTime.Now.ToString("dd MMM yy"));
+            }
+        }
+
         private void SplitLine(JobRequisitionItem item, double oldItemQty, double newItemQty, string notes)
         {
             List<JobRequisitionItem> items = new List<JobRequisitionItem>();
@@ -495,6 +526,11 @@ namespace PRSDesktop
                 }
                 criteria.Add(filter);
             }
+
+            if (JobID != Guid.Empty)
+                criteria.Add(new Filter<JobRequisitionItem>(x => x.Requisition.Job.ID).IsEqualTo(JobID));
+            
+
             sort = new SortOrder<JobRequisitionItem>(x => x.Requisition.Number, SortDirection.Descending);
             base.Reload(criteria, columns, ref sort, action);
         }
@@ -521,6 +557,7 @@ namespace PRSDesktop
 
         private void BuildMenu(DynamicMenuColumn column, CoreRow row)
         {
+            column.AddItem("Mark as already reserved", PRSDesktop.Resources.rack, MarkReserved_Clicked);
             column.AddItem("Treatment Required", PRSDesktop.Resources.palette, TreatmentRequired_Clicked);
             column.AddItem("Order Required", PRSDesktop.Resources.purchase, OrderRequired_Clicked);
             column.AddItem("Mark as Not Checked", PRSDesktop.Resources.disabled, Uncheck_Clicked);

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

@@ -10,12 +10,34 @@
         <dynamicgrid:DynamicSplitPanel.Header>
             <Border CornerRadius="5,5,0,0" BorderBrush="Gray" BorderThickness="0.75" DockPanel.Dock="Top"
                     Background="WhiteSmoke">
-                <Label Content="Job Requisition Item List" HorizontalContentAlignment="Center" />
+                <Label Content="Job Requisition Items" HorizontalContentAlignment="Center" />
             </Border>
         </dynamicgrid:DynamicSplitPanel.Header>
 
         <dynamicgrid:DynamicSplitPanel.Master>
-            <local:JobRequisitionReviewGrid Grid.Row="0" x:Name="jobRequiItems" Margin="0,2,0,0"/>
+            <Grid>
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="*"/>
+                </Grid.RowDefinitions>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="4*"/>
+                </Grid.ColumnDefinitions>
+
+                <DockPanel Grid.Row="0" Grid.Column="0">
+                    <local:JobGrid x:Name="jobsGrid"/>
+                </DockPanel>
+
+                <DockPanel Grid.Row="0" Grid.Column="1"  >
+                    <local:JobRequisitionReviewGrid  x:Name="unProcessedJobRequiItems" Margin="0,2,0,0"/>
+                </DockPanel>
+
+                <DockPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" >
+                    <local:JobRequisitionReviewGrid x:Name="processedJobRequiItems" Margin="0,2,0,0"/>
+                </DockPanel>
+            </Grid>
+
         </dynamicgrid:DynamicSplitPanel.Master>
 
         <dynamicgrid:DynamicSplitPanel.DetailHeader>

+ 62 - 12
prs.desktop/Panels/Products/Job Requisitions/JobRequisitionsPanel.xaml.cs

@@ -23,6 +23,7 @@ namespace PRSDesktop
     /// </summary>
     public partial class JobRequisitionsPanel : UserControl, IPanel<JobRequisitionItem>
     {
+        Guid JobID = Guid.Empty;
         public JobRequisitionsPanel()
         {
             InitializeComponent();
@@ -41,7 +42,7 @@ namespace PRSDesktop
 
         public DataModel DataModel(Selection selection)
         {
-            var ids = jobRequiItems.ExtractValues(x => x.ID, selection).ToArray();
+            var ids = unProcessedJobRequiItems.ExtractValues(x => x.ID, selection).ToArray();
             return new BaseDataModel<JobRequisitionItem>(new Filter<JobRequisitionItem>(x => x.ID).InList(ids));
         }
 
@@ -52,42 +53,91 @@ namespace PRSDesktop
 
         public void Refresh()
         {
-            jobRequiItems.Refresh(true, true);
+            unProcessedJobRequiItems.Refresh(true, true);
+            processedJobRequiItems.Refresh(true, true);
             availableHoldingsGrid.Refresh(true, true);
-            movementHistoryGrid.Refresh(true, true);
+            movementHistoryGrid.Refresh(true, true); 
+            jobsGrid.Refresh(true, true);
         }
 
         public Dictionary<string, object[]> Selected()
         {
             var result = new Dictionary<string, object[]>();
-            result[typeof(JobRequisitionItem).EntityName()] = jobRequiItems.SelectedRows;
+            result[typeof(JobRequisitionItem).EntityName()] = unProcessedJobRequiItems.SelectedRows;
             return result;
         }
 
         public void Setup()
         {
-            SetupJobRequiItemGrid();
-            availableHoldingsGrid.empID = jobRequiItems.empID;
+            SetupJobRequiItemGrids();
+            availableHoldingsGrid.empID = unProcessedJobRequiItems.empID;
             availableHoldingsGrid.OnStockReserved += AvailableHoldingsGrid_OnStockReserved;
+            SetupJobsGrid();
+        }
+
+        private void SetupJobsGrid()
+        {
+            jobsGrid.Options.Remove(InABox.DynamicGrid.DynamicGridOption.AddRows);
+            jobsGrid.Options.Remove(InABox.DynamicGrid.DynamicGridOption.DeleteRows);
+            jobsGrid.Options.Remove(InABox.DynamicGrid.DynamicGridOption.DirectEdit);
+            jobsGrid.Options.Remove(InABox.DynamicGrid.DynamicGridOption.EditRows);
+            jobsGrid.Options.Remove(InABox.DynamicGrid.DynamicGridOption.MultiSelect);
+            jobsGrid.Options.Remove(InABox.DynamicGrid.DynamicGridOption.ExportData);
+            jobsGrid.Options.Remove(InABox.DynamicGrid.DynamicGridOption.ImportData);
+
+            jobsGrid.OnReload += (object sender, Filters<Job> criteria, Columns<Job> columns, ref SortOrder<Job>? sortby) => 
+            {
+                criteria.Add(new Filter<Job>(x => x.JobStatus.Active).IsEqualTo(true));
+                criteria.Add(new Filter<Job>(x => x.JobStatus.Description).IsEqualTo("Active Projects"));
+            };
+
+            jobsGrid.OnSelectItem += (object sender, InABox.DynamicGrid.DynamicGridSelectionEventArgs e) => 
+            {
+                var jobid = jobsGrid.SelectedRows[0].Get<Job, Guid>(x => x.ID);
+                unProcessedJobRequiItems.JobID = jobid;
+                processedJobRequiItems.JobID = jobid;
+                RefreshJobRequiGrids();
+            };
+        }
+
+        private void RefreshJobRequiGrids()
+        {
+            unProcessedJobRequiItems.bRefreshing = false;
+            processedJobRequiItems.bRefreshing = false;
+            unProcessedJobRequiItems.Refresh(false, true);
+            processedJobRequiItems.Refresh(false, true);
         }
 
         private void AvailableHoldingsGrid_OnStockReserved()
         {
-            jobRequiItems.Refresh(false, true);
+            unProcessedJobRequiItems.Refresh(false, true);
+            processedJobRequiItems.Refresh(true, true);
             availableHoldingsGrid.Refresh(false, true);
             movementHistoryGrid.Refresh(false, true);
         }
 
-        private void SetupJobRequiItemGrid()
+        private void SetupJobRequiItemGrids()
         {
-            jobRequiItems.OnJobRequiItemSelected += JobRequiItemGrid_OnJobRequiItemSelected;
-            jobRequiItems.OnGridRefresh += JobRequiItems_OnGridRefresh;
-            jobRequiItems.Refresh(true, true);
+            unProcessedJobRequiItems.OnJobRequiItemSelected += JobRequiItemGrid_OnJobRequiItemSelected;
+            unProcessedJobRequiItems.OnGridRefresh += JobRequiItems_OnGridRefresh;
+            processedJobRequiItems.OnJobRequiItemSelected += JobRequiItemGrid_OnJobRequiItemSelected;
+            processedJobRequiItems.OnGridRefresh += JobRequiItems_OnGridRefresh;
+            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));
+            };
+            processedJobRequiItems.OnReload += (object sender, Filters<JobRequisitionItem> criteria, Columns<JobRequisitionItem> columns, ref SortOrder<JobRequisitionItem>? sortby) =>
+            {
+                criteria.Add(new Filter<JobRequisitionItem>(x => x.Status).IsNotEqualTo(JobRequisitionItemStatus.NotChecked));
+            };
+
+            unProcessedJobRequiItems.Refresh(true, true);
+            processedJobRequiItems.Refresh(true, true);
         }
 
         private void JobRequiItems_OnGridRefresh()
         {
-            jobRequiItems.Refresh(false, true);
+            RefreshJobRequiGrids();
         }
 
         private void JobRequiItemGrid_OnJobRequiItemSelected(JobRequisitionItem item)