瀏覽代碼

Job/Requisition/Detail View now loads embedded ReservationManagement screen

frankvandenbos 1 年之前
父節點
當前提交
e3e6ed014f

+ 29 - 4
prs.desktop/Panels/Jobs/Requisitions/JobRequisitionPanel.xaml

@@ -8,10 +8,15 @@
     xmlns:dynamicgrid="clr-namespace:InABox.DynamicGrid;assembly=InABox.Wpf"
     mc:Ignorable="d"
     d:DesignHeight="450" d:DesignWidth="800">
+    
+    <dynamicgrid:DynamicSplitPanel 
+        x:Name="SplitPanel"  
+        AnchorWidth="500"
+        MasterCaption="Requisition List"
+        View="Combined" 
+        AllowableViews="Detail,Combined"
+        OnChanged="SplitPanel_OnChanged">
 
-    <dynamicgrid:DynamicSplitPanel x:Name="SplitPanel"  AnchorWidth="500" View="Combined" AllowableViews="Combined,Detail"
-                                   OnChanged="SplitPanel_OnChanged">
-        
         <dynamicgrid:DynamicSplitPanel.Header>
             <Border BorderBrush="Gray" BorderThickness="0.75" Background="WhiteSmoke" Height="25">
                 <Label Content="Requisitions" HorizontalContentAlignment="Center"
@@ -22,9 +27,29 @@
         <dynamicgrid:DynamicSplitPanel.Master>
             <local:JobRequisitionGrid x:Name="Requisitions" OnSelectItem="Requisitions_OnSelectItem" />
         </dynamicgrid:DynamicSplitPanel.Master>
+        
+        <dynamicgrid:DynamicSplitPanel.DetailHeader>
+            <Border BorderBrush="Gray" BorderThickness="0.75" Background="WhiteSmoke" Height="25">
+                <Label Content="Requisition Items" HorizontalContentAlignment="Center"
+                       VerticalContentAlignment="Center" />
+            </Border>
+        </dynamicgrid:DynamicSplitPanel.DetailHeader>
 
         <dynamicgrid:DynamicSplitPanel.Detail>
-            <local:JobRequisitionItemGrid x:Name="Items" />
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition x:Name="RequisitionsColumn" Width="0" />
+                    <ColumnDefinition x:Name="SummaryColumn" Width="0" />
+                </Grid.ColumnDefinitions>
+                <local:JobRequisitionItemGrid 
+                    x:Name="Items"
+                    Grid.Column="0"/>
+                <local:ReservationManagementItemGrid  
+                    x:Name="Summary" 
+                    ColumnsTag="JobRequisitionSummary"
+                    Grid.Column="1"
+                    ShowColors="True"/>
+            </Grid>
         </dynamicgrid:DynamicSplitPanel.Detail>
 
     </dynamicgrid:DynamicSplitPanel>

+ 28 - 11
prs.desktop/Panels/Jobs/Requisitions/JobRequisitionPanel.xaml.cs

@@ -5,6 +5,7 @@ using System.Drawing;
 using System.Drawing.Imaging;
 using System.IO;
 using System.Linq;
+using System.Windows;
 using System.Windows.Controls;
 using com.healthmarketscience.jackcess.impl;
 using Comal.Classes;
@@ -21,6 +22,8 @@ public class JobRequisitionPanelSettings : IUserConfigurationSettings, ISplitPan
 {
     public DynamicSplitPanelView ViewType { get; set; } = DynamicSplitPanelView.Combined;
 
+    public int TabIndex { get; set; }
+    
     public double AnchorWidth { get; set; } = 500;
 }
 
@@ -41,8 +44,19 @@ public partial class JobRequisitionPanel : UserControl, IPanel<JobMaterial>, IMa
         Settings = new UserConfiguration<JobRequisitionPanelSettings>().Load();
         SplitPanel.AnchorWidth = Settings.AnchorWidth;
         SplitPanel.View = Settings.ViewType;
+        SetDetailDisplay();
     }
-    
+
+    private void SetDetailDisplay()
+    {
+        RequisitionsColumn.Width = Settings.ViewType == DynamicSplitPanelView.Combined
+            ? new GridLength(1, GridUnitType.Star)
+            : new GridLength(0, GridUnitType.Pixel);
+        SummaryColumn.Width = Settings.ViewType == DynamicSplitPanelView.Detail
+            ? new GridLength(1, GridUnitType.Star)
+            : new GridLength(0, GridUnitType.Pixel);
+    }
+
     protected void SaveSettings()
     {
         Settings.AnchorWidth = SplitPanel.AnchorWidth;
@@ -54,7 +68,11 @@ public partial class JobRequisitionPanel : UserControl, IPanel<JobMaterial>, IMa
     public Job? Master
     {
         get => Requisitions.Master;
-        set => Requisitions.Master = value;
+        set
+        {
+            Requisitions.Master = value;
+            Summary.JobID = value?.ID;
+        }
     }
 
     public bool IsReady { get; set; }
@@ -69,8 +87,8 @@ public partial class JobRequisitionPanel : UserControl, IPanel<JobMaterial>, IMa
     public void Setup()
     {
         LoadSettings();
-
         Requisitions.Refresh(true, false);
+        Summary.Refresh(true,false);
         Items.Refresh(true, false);            
     }
 
@@ -80,16 +98,13 @@ public partial class JobRequisitionPanel : UserControl, IPanel<JobMaterial>, IMa
 
     public void Refresh()
     {
-        if(Settings.ViewType == DynamicSplitPanelView.Detail)
-        {
-            Items.Master = null;
-            Items.Job = Master;
-            Items.Refresh(false, true);
-        }
+        if (!IsReady)
+            return;
+        
+        if (SplitPanel.View == DynamicSplitPanelView.Detail)
+            Summary.Refresh(false,true);
         else
-        {
             Requisitions.Refresh(false, true);
-        }
     }
 
     public string SectionName => "Job Requisitions";
@@ -124,7 +139,9 @@ public partial class JobRequisitionPanel : UserControl, IPanel<JobMaterial>, IMa
         SaveSettings();
         if (changedView)
         {
+            SetDetailDisplay();
             Refresh();
         }
     }
+    
 }

+ 6 - 0
prs.desktop/Panels/Reservation Management/ReservationManagementItemGrid.cs

@@ -32,6 +32,8 @@ public delegate void GridRefresh();
 
 public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>, ISpecificGrid
 {
+    
+    public Guid? JobID { get; set; }
 
     public ReservationManagementUserSettings UserSettings { get; set; }
     
@@ -976,6 +978,10 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
     	Filters<JobRequisitionItem> criteria, Columns<JobRequisitionItem> columns, ref SortOrder<JobRequisitionItem>? sort,
     	CancellationToken token, Action<CoreTable?, Exception?> action)
     {
+
+        if (JobID.HasValue)
+            criteria.Add(new Filter<JobRequisitionItem>(x => x.Requisition.Job.ID).IsEqualTo(JobID.Value));
+        
         criteria.Add(new Filter<JobRequisitionItem>(x => x.Requisition.Approved).IsNotEqualTo(DateTime.MinValue));
 
         criteria.Add(new Filter<JobRequisitionItem>(x => x.Archived).IsEqualTo(DateTime.MinValue));