ソースを参照

Finished creating manufacturing packet list for staging

Kenric Nugteren 2 年 前
コミット
22293df8fd

+ 7 - 10
prs.desktop/Panels/Staging/Manufacturing/StagingManufacturingPacketList.xaml.cs

@@ -54,6 +54,7 @@ namespace PRSDesktop
                     {
                         AddItem(packet);
                     }
+                    OnCollapsed?.Invoke(Collapsed());
                 }
             }
         }
@@ -68,19 +69,13 @@ namespace PRSDesktop
             var item = new StagingManufacturingPacketListItem(packet);
             item.AfterDelete += Item_OnDelete;
             item.OnCollapsed += Item_OnCollapsed;
+            item.Collapsed = false;
             ManufacturingPacketList.Children.Add(item);
         }
 
         private void Item_OnCollapsed(bool collapsed)
         {
-            if (Collapsed())
-            {
-                OnCollapsed?.Invoke(true);
-            }
-            else
-            {
-                OnCollapsed?.Invoke(false);
-            }
+            OnCollapsed?.Invoke(Collapsed());
         }
 
         private void Item_OnDelete(StagingManufacturingPacketListItem obj)
@@ -101,7 +96,9 @@ namespace PRSDesktop
             var grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), typeof(StagingManufacturingPacket));
             if (grid.EditItems(new object[] { newPacket }))
             {
+                StagingManufacturingPacketListItem.CreateStages(newPacket);
                 AddItem(newPacket);
+                OnCollapsed?.Invoke(Collapsed());
             }
         }
 
@@ -109,7 +106,7 @@ namespace PRSDesktop
         {
             foreach(var child in ManufacturingPacketList.Children.Cast<StagingManufacturingPacketListItem>())
             {
-                child.Collapse();
+                child.Collapsed = true;
             }
         }
 
@@ -117,7 +114,7 @@ namespace PRSDesktop
         {
             foreach (var child in ManufacturingPacketList.Children.Cast<StagingManufacturingPacketListItem>())
             {
-                child.Uncollapse();
+                child.Collapsed = false;
             }
         }
 

+ 25 - 8
prs.desktop/Panels/Staging/Manufacturing/StagingManufacturingPacketListItem.xaml

@@ -4,13 +4,26 @@
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:local="clr-namespace:PRSDesktop"
-             mc:Ignorable="d" 
+             mc:Ignorable="d"
              d:DesignHeight="450" d:DesignWidth="800"
              x:Name="Control">
+    <UserControl.Resources>
+        <Style x:Key="StagesRowStyle" TargetType="RowDefinition">
+            <Style.Setters>
+                <Setter Property="Height" Value="{Binding ElementName=Control,Path=StagesGridHeight}"/>
+            </Style.Setters>
+            <Style.Triggers>
+                <DataTrigger Binding="{Binding Path=Collapsed, ElementName=Control}" Value="True">
+                    <Setter Property="Height" Value="0"/>
+                </DataTrigger>
+            </Style.Triggers>
+        </Style>
+    </UserControl.Resources>
+    
     <Grid Margin="2.5">
         <Grid.RowDefinitions>
             <RowDefinition Height="Auto"/>
-            <RowDefinition Height="200"/>
+            <RowDefinition x:Name="StagesRow" Style="{StaticResource StagesRowStyle}"/>
         </Grid.RowDefinitions>
         <Border Padding="5"
                 Grid.Row="0"
@@ -20,23 +33,27 @@
             <DockPanel LastChildFill="True">
                 <Button x:Name="CollapseButton"
                         Click="CollapseButton_Click"
-                        Margin="0,0,5,0"
-                        Width="30" Height="30"/>
+                        Margin="0,0,2,0"
+                        Width="30" Height="30"
+                        Background="Transparent" BorderBrush="Transparent"/>
                 <Button x:Name="DeleteButton"
                         DockPanel.Dock="Right"
                         Margin="0" Width="30" Height="30"
-                        Click="DeleteButton_Click">
+                        Click="DeleteButton_Click"
+                        Background="Transparent" BorderBrush="Transparent">
                     <Image Source="pack://application:,,,/Resources/delete.png"/>
                 </Button>
                 <Button x:Name="EditButton"
                         DockPanel.Dock="Right"
-                        Margin="0,0,5,0" Width="30" Height="30"
-                        Click="EditButton_Click">
+                        Margin="0,0,2,0" Width="30" Height="30"
+                        Click="EditButton_Click"
+                        Background="Transparent" BorderBrush="Transparent">
                     <Image Source="pack://application:,,,/Resources/pencil.png"/>
                 </Button>
-                <Button Margin="0,0,5,0" Height="30" Padding="5,0"
+                <Button Margin="0,0,2,0" Height="30" Padding="5,0"
                         DockPanel.Dock="Right"
                         x:Name="TemplateButton"
+                        MinWidth="110"
                         Click="TemplateButton_Click"/>
                 <TextBox x:Name="SerialBox"
                          TextChanged="SerialBox_TextChanged"

+ 52 - 11
prs.desktop/Panels/Staging/Manufacturing/StagingManufacturingPacketListItem.xaml.cs

@@ -27,6 +27,17 @@ namespace PRSDesktop
     /// </summary>
     public partial class StagingManufacturingPacketListItem : UserControl
     {
+        public static readonly DependencyProperty CollapsedProperty = DependencyProperty.Register(
+            "Collapsed", typeof(bool), typeof(StagingManufacturingPacketListItem),
+            new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.None, new PropertyChangedCallback(OnCollapsedChanged)));
+
+        /// <summary>
+        /// Height of the uncollapsed stages grid.
+        /// </summary>
+        public static readonly DependencyProperty StagesGridHeightProperty = DependencyProperty.Register(
+            "StagesGridHeight", typeof(double), typeof(StagingManufacturingPacketListItem),
+            new FrameworkPropertyMetadata(200.0));
+
         private static BitmapImage collapsedImg = PRSDesktop.Resources.rightarrow.ToBitmapImage();
         private static BitmapImage uncollapsedImg = PRSDesktop.Resources.downarrow.ToBitmapImage();
 
@@ -39,7 +50,17 @@ namespace PRSDesktop
 
         private bool _serialChanged = false;
 
-        public bool Collapsed { get; private set; } = false;
+        public bool Collapsed
+        {
+            get => (bool)GetValue(CollapsedProperty);
+            set => SetValue(CollapsedProperty, value);
+        }
+
+        public double StagesGridHeight
+        {
+            get => (double)GetValue(StagesGridHeightProperty);
+            set => SetValue(StagesGridHeightProperty, value);
+        }
 
         public StagingManufacturingPacketListItem(StagingManufacturingPacket packet)
         {
@@ -55,6 +76,8 @@ namespace PRSDesktop
             };
             StagesGrid.Refresh(true, true);
 
+            SerialBox.Text = Packet.Serial;
+
             StagesContainer.Content = StagesGrid;
 
             if (Collapsed)
@@ -100,7 +123,7 @@ namespace PRSDesktop
             }
             else
             {
-                TemplateButton.Content = $"Template: {Packet.Template.Code}";
+                TemplateButton.Content = $"{Packet.Template.Code}";
             }
         }
 
@@ -109,11 +132,15 @@ namespace PRSDesktop
             new Client<StagingManufacturingPacket>().Save(Packet, "");
         }
 
-        private void UpdateStages()
+        /// <summary>
+        /// Create stages for <paramref name="packet"/> based on its template.
+        /// </summary>
+        /// <param name="packet"></param>
+        public static void CreateStages(StagingManufacturingPacket packet)
         {
             var stages = new Client<ManufacturingTemplateStage>()
                 .Query(
-                    new Filter<ManufacturingTemplateStage>(x => x.Template.ID).IsEqualTo(Packet.Template.ID),
+                    new Filter<ManufacturingTemplateStage>(x => x.Template.ID).IsEqualTo(packet.Template.ID),
                     new Columns<ManufacturingTemplateStage>());
 
             var newStages = stages.ToObjects<ManufacturingTemplateStage>()
@@ -125,14 +152,22 @@ namespace PRSDesktop
                         SequenceType = x.SequenceType,
                         Sequence = x.Sequence
                     };
-                    stage.Packet.ID = Packet.ID;
+                    stage.Packet.ID = packet.ID;
                     stage.Section.ID = x.Section.ID;
                     return stage;
                 }).ToList();
+            new Client<StagingManufacturingPacketStage>().Save(newStages, "");
+        }
 
+        /// <summary>
+        /// Clear all stages and reload from the template.
+        /// </summary>
+        private void UpdateStages()
+        {
             var oldStages = StagesGrid.Data.ToObjects<StagingManufacturingPacketStage>().ToArray();
             new Client<StagingManufacturingPacketStage>().Delete(oldStages, "");
-            new Client<StagingManufacturingPacketStage>().Save(newStages, "");
+
+            CreateStages(Packet);
 
             StagesGrid.Refresh(false, true);
         }
@@ -176,12 +211,12 @@ namespace PRSDesktop
             }
         }
 
-        public void Collapse()
+        private void Collapse()
         {
             CollapseButton.Content = new Image { Source = collapsedImg };
             OnCollapsed?.Invoke(true);
         }
-        public void Uncollapse()
+        private void Uncollapse()
         {
             CollapseButton.Content = new Image { Source = uncollapsedImg };
             OnCollapsed?.Invoke(false);
@@ -190,13 +225,19 @@ namespace PRSDesktop
         private void CollapseButton_Click(object sender, RoutedEventArgs e)
         {
             Collapsed = !Collapsed;
-            if (Collapsed)
+        }
+
+        private static void OnCollapsedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+        {
+            var item = (StagingManufacturingPacketListItem)d;
+            var collapsed = (bool)e.NewValue;
+            if (collapsed)
             {
-                Collapse();
+                item.Collapse();
             }
             else
             {
-                Uncollapse();
+                item.Uncollapse();
             }
         }
     }

+ 1 - 1
prs.desktop/Panels/Staging/Manufacturing/StagingManufacturingPacketStageGrid.cs

@@ -21,8 +21,8 @@ namespace PRSDesktop
 
         protected override void GenerateColumns(DynamicGridColumns columns)
         {
-            columns.Add<StagingManufacturingPacketStage, TimeSpan>(x => x.Time, 70, "Time", "", Alignment.MiddleCenter);
             columns.Add<StagingManufacturingPacketStage, Guid>(x => x.Section.ID, 0, "Section", "", Alignment.MiddleCenter);
+            columns.Add<StagingManufacturingPacketStage, TimeSpan>(x => x.Time, 70, "Time", "", Alignment.MiddleCenter);
         }
 
         protected override void DoReconfigure(FluentList<DynamicGridOption> options)

+ 14 - 14
prs.desktop/Panels/Staging/StagingPanel.xaml

@@ -46,23 +46,23 @@
                 </dynamicgrid:DynamicSplitPanel.Master>
                 
                 <dynamicgrid:DynamicSplitPanel.DetailHeader>
-                    <Border BorderBrush="Gray" BorderThickness="0.75" Background="WhiteSmoke">
-                        <DockPanel>
-                            <Button x:Name="AddPacketButton" Click="AddPacketButton_Click"
-                                    IsEnabled="False"
-                                    DockPanel.Dock="Right"
-                                    Margin="5" Width="30" Height="30">
-                                <Image Source="pack://application:,,,/Resources/add.png"/>
-                            </Button>
-                            <Button x:Name="CollapsePacketsButton" Click="CollapsePacketsButton_Click"
+                    <DockPanel LastChildFill="True">
+                        <Button x:Name="CollapsePacketsButton" Click="CollapsePacketsButton_Click"
                                     Content="Collapse"
+                                    IsEnabled="False"
+                                    DockPanel.Dock="Left"
+                                    Margin="0,0,2,0" Padding="5" Width="75"/>
+                        <Button x:Name="AddPacketButton" Click="AddPacketButton_Click"
                                     IsEnabled="False"
                                     DockPanel.Dock="Right"
-                                    Margin="5,0,0,0" Padding="5"/>
-                            <Label Content="Manufacturing Packets" HorizontalAlignment="Center" FontWeight="DemiBold" VerticalContentAlignment="Center"
-                                   DockPanel.Dock="Left"/>
-                        </DockPanel>
-                    </Border>
+                                    Margin="2,0,0,0" Width="30" Height="30">
+                            <Image Source="pack://application:,,,/Resources/add.png"/>
+                        </Button>
+                        <Border BorderBrush="Gray" BorderThickness="0.75" Background="WhiteSmoke"
+                                DockPanel.Dock="Left">
+                            <Label Content="Manufacturing Packets" HorizontalAlignment="Center" FontWeight="DemiBold" VerticalContentAlignment="Center"/>
+                        </Border>
+                    </DockPanel>
                 </dynamicgrid:DynamicSplitPanel.DetailHeader>
                 
                 <dynamicgrid:DynamicSplitPanel.Detail>

+ 2 - 0
prs.desktop/Panels/Staging/StagingPanel.xaml.cs

@@ -382,6 +382,7 @@ namespace PRSDesktop
             {
                 documentPreviewer.Document = null;
                 ManufacturingPacketList.Setout = null;
+                CollapsePacketsButton.IsEnabled = false;
                 return;
             }
 
@@ -402,6 +403,7 @@ namespace PRSDesktop
             {
                 ManufacturingPacketList.Setout = selectedSetout;
             }
+            CollapsePacketsButton.IsEnabled = true;
             //manufacturingControl.StagingSetout = _item;
             documentPreviewer.Mode =
                 selectedSetout.Locked == DateTime.MinValue ? InABox.Wpf.DocumentApprovalControl.ControlMode.Markup :