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

Added a job document set folder selection dialog

Kenric Nugteren 1 год назад
Родитель
Сommit
c3fd448d23

+ 30 - 0
prs.desktop/Panels/Jobs/DocumentSets/JobDocumentSetFolderSelectionDialog.xaml

@@ -0,0 +1,30 @@
+<Window x:Class="PRSDesktop.Panels.Jobs.JobDocumentSetFolderSelectionDialog"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:PRSDesktop.Panels.Jobs"
+        xmlns:desktop="clr-namespace:PRSDesktop"
+        mc:Ignorable="d"
+        Title="Select Folder:" Height="450" Width="800"
+        Loaded="Window_Loaded">
+    <Grid Margin="5">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="*"/>
+            <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+        <desktop:JobDocumentSetFolderTree Grid.Row="0"
+                                          x:Name="Folders"
+                                          HasAllItems="False"
+                                          OnSelectItem="Folders_OnSelectItem"/>
+        <DockPanel Grid.Row="1" LastChildFill="False">
+            <Button x:Name="CancelButton" DockPanel.Dock="Right" Content="Cancel"
+                    Margin="0,5,0,0" Padding="5" MinWidth="50"
+                    Click="CancelButton_Click"/>
+            <Button x:Name="OKButton" DockPanel.Dock="Right" Content="OK"
+                    Margin="0,5,5,0" Padding="5" MinWidth="50"
+                    IsEnabled="False"
+                    Click="OKButton_Click"/>
+        </DockPanel>
+    </Grid>
+</Window>

+ 73 - 0
prs.desktop/Panels/Jobs/DocumentSets/JobDocumentSetFolderSelectionDialog.xaml.cs

@@ -0,0 +1,73 @@
+using Comal.Classes;
+using InABox.Wpf;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace PRSDesktop.Panels.Jobs;
+
+/// <summary>
+/// Interaction logic for JobDocumentSetFolderSelectionDialog.xaml
+/// </summary>
+public partial class JobDocumentSetFolderSelectionDialog : Window
+{
+    public Guid SelectedFolder { get; set; } = Guid.Empty;
+
+    public Job Job
+    {
+        get => Folders.Job;
+        set
+        {
+            Folders.Job = value;
+        }
+    }
+
+    public JobDocumentSetFolderSelectionDialog(Job job)
+    {
+        InitializeComponent();
+
+        Folders.Options.Clear();
+
+        Job = job;
+    }
+
+    private void Folders_OnSelectItem(InABox.Core.CoreTreeNode node)
+    {
+        SelectedFolder = node.ID;
+        OKButton.IsEnabled = SelectedFolder != Guid.Empty;
+    }
+
+    private void CancelButton_Click(object sender, RoutedEventArgs e)
+    {
+        DialogResult = false;
+        SelectedFolder = Guid.Empty;
+        Close();
+    }
+
+    private void OKButton_Click(object sender, RoutedEventArgs e)
+    {
+        if(SelectedFolder == Guid.Empty)
+        {
+            MessageWindow.ShowMessage("Please select a folder.", "Select a folder");
+            return;
+        }
+        DialogResult = true;
+        Close();
+    }
+
+    private void Window_Loaded(object sender, RoutedEventArgs e)
+    {
+        Folders.Refresh();
+    }
+}

+ 84 - 82
prs.desktop/Panels/Jobs/DocumentSets/JobDocumentSetFolderTree.cs

@@ -9,44 +9,46 @@ using InABox.Core;
 using InABox.DynamicGrid;
 using InABox.WPF;
 
-namespace PRSDesktop
+namespace PRSDesktop;
+
+public class JobDocumentSetFolderTree : DynamicTreeView<JobDocumentSetFolder>
 {
-    public class JobDocumentSetFolderTree : DynamicTreeView<JobDocumentSetFolder>
-    {
-        
-        public Job Job { get; set; }
-        
-        public JobDocumentSetFolderTree() : base()
-        {
-            Options.AddRange(DynamicTreeOption.Add, DynamicTreeOption.Edit, DynamicTreeOption.Delete);
-            MaxRowHeight = 30D;
-            OnContextMenuOpening += JobDocumentSetFolderTree_OnContextMenuOpening;
+    public Job Job { get; set; }
 
-        }
+    public bool HasAllItems { get; set; } = true;
+    
+    public JobDocumentSetFolderTree() : base()
+    {
+        Options.AddRange(DynamicTreeOption.Add, DynamicTreeOption.Edit, DynamicTreeOption.Delete);
+        MaxRowHeight = 30D;
+        OnContextMenuOpening += JobDocumentSetFolderTree_OnContextMenuOpening;
+    }
 
-        private void JobDocumentSetFolderTree_OnContextMenuOpening(CoreTreeNode node, ContextMenu menu)
+    private void JobDocumentSetFolderTree_OnContextMenuOpening(CoreTreeNode node, ContextMenu menu)
+    {
+        if(node.ID != CoreUtils.FullGuid)
         {
-            if(node.ID != CoreUtils.FullGuid)
-            {
-                menu.AddItem("Add Child Folder", null, node, (n) => DoAddItem(n.ID,true));
-            }
+            menu.AddItem("Add Child Folder", null, node, (n) => DoAddItem(n.ID,true));
         }
+    }
 
-        protected override Expression<Func<JobDocumentSetFolder, Guid>> ID => x => x.ID;
-        protected override Expression<Func<JobDocumentSetFolder, Guid>> ParentID => x => x.Parent.ID;
-        protected override Expression<Func<JobDocumentSetFolder, string>> Description => x => x.Name;
+    protected override Expression<Func<JobDocumentSetFolder, Guid>> ID => x => x.ID;
+    protected override Expression<Func<JobDocumentSetFolder, Guid>> ParentID => x => x.Parent.ID;
+    protected override Expression<Func<JobDocumentSetFolder, string>> Description => x => x.Name;
 
-        protected override void DoRefresh(Action<CoreTable?, Exception?> action)
+    protected override void DoRefresh(Action<CoreTable?, Exception?> action)
+    {
+        try
         {
-            try
-            {
-                var data = new Client<JobDocumentSetFolder>().Query(
-                    new Filter<JobDocumentSetFolder>(x => x.Job.ID).IsEqualTo(Job.ID),
-                    new Columns<JobDocumentSetFolder>(
-                        x => x.ID, x => x.Parent.ID,
-                        x => x.Name, x => x.Documents)
-                );
+            var data = new Client<JobDocumentSetFolder>().Query(
+                new Filter<JobDocumentSetFolder>(x => x.Job.ID).IsEqualTo(Job.ID),
+                new Columns<JobDocumentSetFolder>(
+                    x => x.ID, x => x.Parent.ID,
+                    x => x.Name, x => x.Documents)
+            );
 
+            if (HasAllItems)
+            {
                 var newRow = data.NewRow();
                 newRow.Set<JobDocumentSetFolder, Guid>(x => x.ID, CoreUtils.FullGuid);
                 newRow.Set<JobDocumentSetFolder, Guid>(x => x.Parent.ID, Guid.Empty);
@@ -54,74 +56,74 @@ namespace PRSDesktop
                 newRow.Set<JobDocumentSetFolder, int>(x => x.Documents, int.MaxValue);
 
                 data.Rows.Insert(0, newRow);
-                action(data, null);
-            }
-            catch(Exception e)
-            {
-                action(null, e);
             }
+            action(data, null);
         }
-        
-        protected override JobDocumentSetFolder DoCreateItem(Guid parent)
+        catch(Exception e)
         {
-            if ((Job.ID == Guid.Empty) || (Job.ID == CoreUtils.FullGuid))
-                throw new Exception("Please Select a Job First!");
-            
-            var folder = base.DoCreateItem(parent);
-            folder.Job.ID = Job.ID;
-            folder.Name = "New Folder";
-            return folder;
+            action(null, e);
         }
+    }
+    
+    protected override JobDocumentSetFolder DoCreateItem(Guid parent)
+    {
+        if ((Job.ID == Guid.Empty) || (Job.ID == CoreUtils.FullGuid))
+            throw new Exception("Please Select a Job First!");
+        
+        var folder = base.DoCreateItem(parent);
+        folder.Job.ID = Job.ID;
+        folder.Name = "New Folder";
+        return folder;
+    }
 
-        protected override JobDocumentSetFolder? DoLoadItem(Guid id)
+    protected override JobDocumentSetFolder? DoLoadItem(Guid id)
+    {
+        if (id == CoreUtils.FullGuid)
         {
-            if (id == CoreUtils.FullGuid)
-            {
-                MessageBox.Show("This item cannot be edited.");
-                return null;
-            }
+            MessageBox.Show("This item cannot be edited.");
+            return null;
+        }
 
-            var folder = new Client<JobDocumentSetFolder>().Query(
-                new Filter<JobDocumentSetFolder>(x => x.ID).IsEqualTo(id)
-            ).Rows.FirstOrDefault()?.ToObject<JobDocumentSetFolder>();
-            if(folder == null)
-            {
-                Logger.Send(LogType.Error, "", $"Cannot load JobDocumentSetFolder: {id} does not exist!");
-            }
-            return folder;
+        var folder = new Client<JobDocumentSetFolder>().Query(
+            new Filter<JobDocumentSetFolder>(x => x.ID).IsEqualTo(id)
+        ).Rows.FirstOrDefault()?.ToObject<JobDocumentSetFolder>();
+        if(folder == null)
+        {
+            Logger.Send(LogType.Error, "", $"Cannot load JobDocumentSetFolder: {id} does not exist!");
         }
+        return folder;
+    }
 
-        protected override void DoSaveItem(JobDocumentSetFolder folder)
+    protected override void DoSaveItem(JobDocumentSetFolder folder)
+    {
+        if (folder.ID != CoreUtils.FullGuid)
         {
-            if (folder.ID != CoreUtils.FullGuid)
-            {
-                new Client<JobDocumentSetFolder>().Save(folder, "Edited by User");
-            }
+            new Client<JobDocumentSetFolder>().Save(folder, "Edited by User");
         }
+    }
 
-        protected override bool DoDeleteItem(Guid id)
+    protected override bool DoDeleteItem(Guid id)
+    {
+        if(id == CoreUtils.FullGuid)
         {
-            if(id == CoreUtils.FullGuid)
-            {
-                MessageBox.Show("This folder cannot be deleted.");
-                return false;
-            }
+            MessageBox.Show("This folder cannot be deleted.");
+            return false;
+        }
 
-            CoreRow? row = Data.Rows.FirstOrDefault(r=>r.Get<JobDocumentSetFolder, Guid>(x => x.ID) == id);
-            if(row == null)
-            {
-                MessageBox.Show("Error: Row does not exist!");
-                Logger.Send(LogType.Error, ClientFactory.UserID, $"Error: Job Document Set Folder {id} does not exist or is not loaded");
-                return false;
-            }
+        CoreRow? row = Data.Rows.FirstOrDefault(r=>r.Get<JobDocumentSetFolder, Guid>(x => x.ID) == id);
+        if(row == null)
+        {
+            MessageBox.Show("Error: Row does not exist!");
+            Logger.Send(LogType.Error, ClientFactory.UserID, $"Error: Job Document Set Folder {id} does not exist or is not loaded");
+            return false;
+        }
 
-            if (row.Get<JobDocumentSetFolder, int>(x => x.Documents) > 0)
-            {
-                MessageBox.Show("This folder is not empty, and cannot be deleted!");
-                return false;
-            }
-            new Client<JobDocumentSetFolder>().Delete(new JobDocumentSetFolder() { ID = id }, "Deleted by User");
-            return true;
+        if (row.Get<JobDocumentSetFolder, int>(x => x.Documents) > 0)
+        {
+            MessageBox.Show("This folder is not empty, and cannot be deleted!");
+            return false;
         }
+        new Client<JobDocumentSetFolder>().Delete(new JobDocumentSetFolder() { ID = id }, "Deleted by User");
+        return true;
     }
 }

+ 4 - 6
prs.desktop/Panels/Jobs/JobProductMappingsGrid.cs

@@ -86,11 +86,9 @@ public class JobProductMappingsGrid : DynamicDataGrid<JobProductMapping>, IJobCo
 
     private void CreateDocumentSet(CoreRow row)
     {
-        var folder = new MultiSelectDialog<JobDocumentSetFolder>(
-            new Filter<JobDocumentSetFolder>(x => x.Job.ID).IsEqualTo(Job.ID),
-            new Columns<JobDocumentSetFolder>(x => x.ID),
-            multiselect: false);
-        if (!folder.ShowDialog())
+        var dialog = new JobDocumentSetFolderSelectionDialog(Job);
+
+        if (dialog.ShowDialog() != true)
         {
             MessageWindow.ShowMessage("You need to select a folder to add this document set to.", "Folder required");
             return;
@@ -103,7 +101,7 @@ public class JobProductMappingsGrid : DynamicDataGrid<JobProductMapping>, IJobCo
             Description = row.Get<JobProductMapping, string>(x => x.Description) + $"\nAttached to JobProductMapping '{code}'"
         };
         docSet.Job.ID = Job.ID;
-        docSet.Folder.ID = folder.IDs().First();
+        docSet.Folder.ID = dialog.SelectedFolder;
         if(GetDocumentSetGrid().EditItems(new JobDocumentSet[] { docSet }))
         {
             var productMapping = row.ToObject<JobProductMapping>();

+ 4 - 6
prs.desktop/Panels/Jobs/JobProductStylesGrid.cs

@@ -83,11 +83,9 @@ public class JobProductStylesGrid : DynamicDataGrid<JobStyle>, IJobControl, IDat
 
     private void CreateDocumentSet(CoreRow row)
     {
-        var folder = new MultiSelectDialog<JobDocumentSetFolder>(
-            new Filter<JobDocumentSetFolder>(x => x.Job.ID).IsEqualTo(Job.ID),
-            new Columns<JobDocumentSetFolder>(x => x.ID),
-            multiselect: false);
-        if (!folder.ShowDialog())
+        var dialog = new JobDocumentSetFolderSelectionDialog(Job);
+
+        if (dialog.ShowDialog() != true)
         {
             MessageWindow.ShowMessage("You need to select a folder to add this document set to.", "Folder required");
             return;
@@ -100,7 +98,7 @@ public class JobProductStylesGrid : DynamicDataGrid<JobStyle>, IJobControl, IDat
             Description = row.Get<JobStyle, string>(x => x.Style.Description) + $"\nAttached to Product Style '{code}'"
         };
         docSet.Job.ID = Job.ID;
-        docSet.Folder.ID = folder.IDs().First();
+        docSet.Folder.ID = dialog.SelectedFolder;
         if (GetDocumentSetGrid().EditItems(new JobDocumentSet[] { docSet }))
         {
             var jobStyle = row.ToObject<JobStyle>();