Преглед изворни кода

Added DefaultForm to StagingPanelSettings; made editing SetoutForms non-modal

Kenric Nugteren пре 1 месец
родитељ
комит
9852b3c791

+ 62 - 0
prs.classes/Settings/StagingPanelSettings.cs

@@ -0,0 +1,62 @@
+using InABox.Configuration;
+using InABox.Core;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Comal.Classes
+{
+    [Caption("Staging Panel Settings")]
+    public class StagingPanellSettings : BaseObject, IGlobalConfigurationSettings
+    {
+        [Caption("PDF Markup Program Pathway", IncludePath = false)]
+        [FileNameEditor]
+        [EditorSequence(1)]
+        public string MarkupPathway { get; set; } = "";
+
+        [FolderEditor(Environment.SpecialFolder.CommonDocuments)]
+        [EditorSequence(2)]
+        public string SetoutsFolder { get; set; } = "";
+
+        [Comment("Maximum Document Size (MB)")]
+        [IntegerEditor(Caption = "Maximum Document Size (MB)", ToolTip = "The user will be warned when uploading documents which are larger than this size in megabytes. Set to zero for no maximum.")]
+        [EditorSequence(3)]
+        public int MaximumDocumentSize { get; set; } = 0;
+
+        [ScriptEditor]
+        [EditorSequence(4)]
+        public string? Script { get; set; }
+
+        [Comment("Variable name for the EmbeddedImage document field on StagingSetout forms")]
+        [EditorSequence(5)]
+        public string FormVariable { get; set; } = "";
+
+        private class DefaultFormLookup : LookupDefinitionGenerator<DigitalForm, StagingPanellSettings>
+        {
+            public override Filter<DigitalForm>? DefineFilter(StagingPanellSettings[] items)
+            {
+                return Filter<DigitalForm>.Where(x => x.AppliesTo).IsEqualTo(nameof(StagingSetout));
+            }
+        }
+        [Comment("Default form to be used for requesting site measurements")]
+        [EditorSequence(6)]
+        [LookupDefinition(typeof(DefaultFormLookup))]
+        public DigitalFormLink DefaultForm { get; set; }
+
+        public static string DefaultScript()
+        {
+            return @"
+    using PRSDesktop;
+    using InABox.Core;
+    using System.Collections.Generic;
+
+    public class Module
+    {
+        /*public void CustomiseSetouts(CustomiseSetoutsArgs args)
+        {
+            // Perform customisation on the setouts when they are added to the 'Staged Documents' grid.
+        }*/
+    }";
+        }
+    }
+}

+ 40 - 1
prs.desktop/Panels/Staging/Setouts/StagingSetoutGrid.cs

@@ -379,6 +379,10 @@ public class StagingSetoutGrid : DynamicDataGrid<StagingSetout>
         column.AddItem("Import Components", PRSDesktop.Resources.doc_xls, ImportComponents);
         column.AddSeparator();
         Guid designID = row.Get<StagingSetout, Guid>(x => x.ID);
+        if(PanelSettings.DefaultForm.ID != Guid.Empty)
+        {
+            column.AddItem("Request Site Measure", null, RequestSiteMeasure);
+        }
         var formsItem = column.AddItem("Digital Forms", PRSDesktop.Resources.quality, null);
         DynamicGridUtils.PopulateFormMenu<StagingSetoutForm, StagingSetout, StagingSetoutLink>(
             formsItem,
@@ -387,7 +391,42 @@ public class StagingSetoutGrid : DynamicDataGrid<StagingSetout>
                 Filter<StagingSetout>.Where(x => x.ID).IsEqualTo(designID),
                 Columns.Required<StagingSetout>()).ToObjects<StagingSetout>()
             .FirstOrDefault() ?? new StagingSetout(),
-            customiseNewForm: CustomiseNewForm);
+            customiseNewForm: CustomiseNewForm,
+            nonModalHost: ISubPanelHost.Global);
+    }
+
+    private void RequestSiteMeasure(CoreRow? row)
+    {
+        if (row is null || PanelSettings.DefaultForm.ID == Guid.Empty) return;
+
+        try
+        {
+            var entity = row.ToObject<StagingSetout>();
+            var digitalForm = Client.Query(
+                Filter<DigitalForm>.Where(x => x.ID).IsEqualTo(PanelSettings.DefaultForm.ID),
+                LookupFactory.DefineLookupColumns<StagingSetoutForm, DigitalForm, DigitalFormLink>(x => x.Form).Add(x => x.Description))
+                .ToObjects<DigitalForm>().FirstOrDefault();
+            if(digitalForm is null)
+            {
+                MessageWindow.ShowError("Could not add form.", $"No form with ID {PanelSettings.DefaultForm.ID} was found in the database");
+                return;
+            }
+
+            var form = new StagingSetoutForm
+            {
+                Description = digitalForm.Description
+            };
+            form.Parent.ID = entity.ID;
+            form.Form.ID = digitalForm.ID;
+            CustomiseNewForm(entity, form);
+            Client.Save(form, "Added by user");
+
+            MessageWindow.ShowMessage("Site measurement form created.", "Success");
+        }
+        catch(Exception exception)
+        {
+            MessageWindow.ShowError("Error adding form.", exception);
+        }
     }
 
     private void CustomiseNewForm(StagingSetout setout, StagingSetoutForm form)

+ 1 - 51
prs.desktop/Panels/Staging/StagingPanel.xaml.cs

@@ -24,56 +24,6 @@ using MemoryStream = System.IO.MemoryStream;
 
 namespace PRSDesktop;
 
-[Caption("Staging Panel Settings")]
-public class StagingPanellSettings : BaseObject, IGlobalConfigurationSettings
-{
-    [Caption("PDF Markup Program Pathway", IncludePath = false)]
-    [FileNameEditor]
-    [EditorSequence(1)]
-    public string MarkupPathway { get; set; }
-
-    [FolderEditor(Environment.SpecialFolder.CommonDocuments)]
-    [EditorSequence(2)]
-    public string SetoutsFolder { get; set; }
-
-    [Comment("Maximum Document Size (MB)")]
-    [IntegerEditor(Caption = "Maximum Document Size (MB)", ToolTip = "The user will be warned when uploading documents which are larger than this size in megabytes. Set to zero for no maximum.")]
-    [EditorSequence(3)]
-    public int MaximumDocumentSize { get; set; }
-
-    [ScriptEditor]
-    [EditorSequence(4)]
-    public string? Script { get; set; }
-
-    [Comment("Variable name for the EmbeddedImage document field on StagingSetout forms")]
-    [EditorSequence(5)]
-    public string FormVariable { get; set; }
-
-    public StagingPanellSettings()
-    {
-        MarkupPathway = "";
-        SetoutsFolder = "";
-        Script = null;
-        MaximumDocumentSize = 0;
-    }
-
-    public string DefaultScript()
-    {
-        return @"
-using PRSDesktop;
-using InABox.Core;
-using System.Collections.Generic;
-
-public class Module
-{
-    /*public void CustomiseSetouts(CustomiseSetoutsArgs args)
-    {
-        // Perform customisation on the setouts when they are added to the 'Staged Documents' grid.
-    }*/
-}";
-    }
-}
-
 public class CustomiseSetoutsArgs
 {
     public IReadOnlyList<Tuple<StagingSetout, Document>> Setouts;
@@ -933,7 +883,7 @@ public partial class StagingPanel : UserControl, IPanel<StagingSetout>
             scriptEditor.OnEditorClicked += () =>
             {
                 var script = settings.Script.NotWhiteSpaceOr()
-                    ?? settings.DefaultScript();
+                    ?? StagingPanellSettings.DefaultScript();
 
                 var editor = new ScriptEditorWindow(script, SyntaxLanguage.CSharp);
                 if (editor.ShowDialog() == true)