Browse Source

Fixed Broken QuoteCostSheet DigitalForm stuff
Fixed blanked out Project Screen Tabs
Products now require a UnitOfMeasure value before saving

frogsoftware 1 year ago
parent
commit
c79b0db6e0

+ 31 - 82
prs.classes/Entities/Quote/QuoteCostSheet/QuoteCostSheet.cs

@@ -1,5 +1,6 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using System.Linq;
 using System.Linq.Expressions;
 using System.Linq.Expressions;
 using InABox.Core;
 using InABox.Core;
 
 
@@ -46,11 +47,12 @@ namespace Comal.Classes
 
 
     [UserTracking(typeof(Quote))]
     [UserTracking(typeof(Quote))]
     public class QuoteCostSheet : Entity, IRemotable, IPersistent, IQuoteCostSheet, ILicense<QuotesManagementLicense>, 
     public class QuoteCostSheet : Entity, IRemotable, IPersistent, IQuoteCostSheet, ILicense<QuotesManagementLicense>, 
-        IStringAutoIncrement<QuoteCostSheet>,
-        IDigitalForm<Quote>, 
-        IDigitalFormInstance<QuoteLink>
+        IStringAutoIncrement<QuoteCostSheet>
     {
     {
         
         
+        [NullEditor]
+        public long Sequence { get; set; }
+        
         #region IAutoIncrement
         #region IAutoIncrement
         
         
         public Expression<Func<QuoteCostSheet, String>> AutoIncrementField() => x => x.Number;
         public Expression<Func<QuoteCostSheet, String>> AutoIncrementField() => x => x.Number;
@@ -66,13 +68,34 @@ namespace Comal.Classes
         [NullEditor]
         [NullEditor]
         [Obsolete("Replaced with Parent")]
         [Obsolete("Replaced with Parent")]
         [EntityRelationship(DeleteAction.Cascade)]
         [EntityRelationship(DeleteAction.Cascade)]
-        public QuoteLink Quote
+        public QuoteLink Quote { get; set; }
+        
+        [CodeEditor]
+        [EditorSequence(1)]
+        public string Number { get; set; }
+        
+        [TextBoxEditor(Visible = Visible.Default)]
+        [EditorSequence(2)]
+        public string Description { get; set; }
+        
+        private class QuoteCostSheetFormLookup : LookupDefinitionGenerator<QuoteForm, QuoteCostSheet>
         {
         {
-            get => Parent;
-            set => Parent = value;
-        }
+            public override Filter<QuoteForm> DefineFilter(QuoteCostSheet[] items)
+            {
+                if (items?.Any() != true)
+                    return LookupFactory.DefineFilter<QuoteForm>();
+                return new Filter<QuoteForm>(x => x.Parent.ID).IsEqualTo(items.First().Quote.ID);
+            }
 
 
+            public override Columns<QuoteCostSheet> DefineFilterColumns()
+                => new Columns<QuoteCostSheet>(ColumnTypeFlags.Required);
+        }
+        [LookupDefinition(typeof(QuoteCostSheetFormLookup))]
+        [EditorSequence(3)]
+        public QuoteFormLink Form { get; set; }
+        
         [EntityRelationship(DeleteAction.SetNull)]
         [EntityRelationship(DeleteAction.SetNull)]
+        [EditorSequence(4)]
         public CostSheetLink CostSheet { get; set; }
         public CostSheetLink CostSheet { get; set; }
 
 
         [CurrencyEditor(Visible = Visible.Default, Editable = Editable.Hidden, Summary = Summary.Sum)]
         [CurrencyEditor(Visible = Visible.Default, Editable = Editable.Hidden, Summary = Summary.Sum)]
@@ -86,80 +109,6 @@ namespace Comal.Classes
         [CurrencyEditor(Visible = Visible.Optional, Editable = Editable.Hidden, Summary = Summary.Sum)]
         [CurrencyEditor(Visible = Visible.Optional, Editable = Editable.Hidden, Summary = Summary.Sum)]
         [Aggregate(typeof(QuoteCostSheetIncTax))]
         [Aggregate(typeof(QuoteCostSheetIncTax))]
         public double IncTax { get; set; }
         public double IncTax { get; set; }
-
-
-
-        [TextBoxEditor(Visible = Visible.Default)]
-        public string Description { get; set; }
-
-
-
-        [NullEditor]
-        public long Sequence { get; set; }
-        
-        #region DigitalFormInstance stuff
-
-        
-        [NullEditor]
-        public QAFormLink QAForm { get; set; }
-        
-        [NullEditor]
-        public string QAData { get; set; }
-        
-        [NullEditor]
-        public string Number { get; set; }
         
         
-        [NullEditor]
-        public string FormData { get; set; }
-        
-        [NullEditor]
-        public string? BlobData { get; set; }
-        
-        [NullEditor]
-        public DateTime QACompleted { get; set; }
-        
-        [NullEditor]
-        public UserLink QACompletedBy { get; set; }
-        
-        [NullEditor]
-        public UserLink FormCompletedBy { get; set; }
-        
-        [NullEditor]
-        public Location Location { get; set; }
-        
-        [NullEditor]
-        public QuoteLink Parent { get; set; }
-        
-        [NullEditor]
-        public DigitalFormLink Form { get; set; }
-        
-        [NullEditor]
-        public DateTime FormStarted { get; set; }
-        
-        [NullEditor]
-        public TimeSpan FormOpen { get; set; }
-        
-        [NullEditor]
-        public DateTime FormCompleted { get; set; }
-        
-        [NullEditor]
-        public DateTime FormProcessed { get; set; }
-        
-        [NullEditor]
-        public DateTime FormCancelled { get; set; }
-
-        public Guid ParentID() => Quote.ID;
-        
-        public Type ParentType() => typeof(Quote);
-        
-        public IDigitalFormDataModel CreateDataModel(Entity? parent = null)
-        {
-            var t = typeof(DigitalFormDataModel<,,>).MakeGenericType(typeof(Quote), typeof(QuoteLink), GetType());
-            if (parent != null)
-                return (Activator.CreateInstance(t, parent, this) as IDigitalFormDataModel)!;
-            return (Activator.CreateInstance(t, Parent.ID, ID) as IDigitalFormDataModel)!;
-        }
-        
-        # endregion
-    }
+     }
 }
 }

+ 6 - 0
prs.classes/Entities/Quote/QuoteForm.cs

@@ -7,4 +7,10 @@ namespace Comal.Classes
     {
     {
         public override string AutoIncrementPrefix() => "QF";
         public override string AutoIncrementPrefix() => "QF";
     }
     }
+
+    public class QuoteFormLink : EntityLink<QuoteForm>
+    {
+        [LookupEditor(typeof(QuoteForm))]
+        public override Guid ID { get; set; }
+    }
 }
 }

+ 23 - 16
prs.desktop/Dashboards/Common/DigitalFormsDashboard.xaml.cs

@@ -1050,25 +1050,32 @@ public partial class DigitalFormsDashboard : UserControl,
 
 
     private static bool CategoryToType(string category, [NotNullWhen(true)] out Type? formType, [NotNullWhen(true)] out Type? parentType)
     private static bool CategoryToType(string category, [NotNullWhen(true)] out Type? formType, [NotNullWhen(true)] out Type? parentType)
     {
     {
-        FormInstanceTypes ??= CoreUtils.TypeList(
-            AppDomain.CurrentDomain.GetAssemblies(),
-            x => !x.IsAbstract && x.GetInterfaces().Contains(typeof(IDigitalFormInstance))
-        ).Select(x =>
-        {
-            var inter = x.GetInterfaces()
-                .Where(x => x.IsGenericType && x.GetGenericTypeDefinition().Equals(typeof(IDigitalFormInstance<>))).FirstOrDefault();
-            if (inter is not null)
+        if (FormInstanceTypes == null)
+        {
+            var instancetypes = CoreUtils.TypeList(
+                AppDomain.CurrentDomain.GetAssemblies(),
+                x => !x.IsAbstract && x.GetInterfaces().Contains(typeof(IDigitalFormInstance))
+            ).Select(x =>
             {
             {
-                var link = inter.GenericTypeArguments[0];
-                var entityLinkDef = link.GetSuperclassDefinition(typeof(EntityLink<>));
-                if (entityLinkDef is not null)
+                var inter = x.GetInterfaces()
+                    .Where(x => x.IsGenericType && x.GetGenericTypeDefinition().Equals(typeof(IDigitalFormInstance<>)))
+                    .FirstOrDefault();
+                if (inter is not null)
                 {
                 {
-                    var entityType = entityLinkDef.GenericTypeArguments[0];
-                    return new Tuple<string, Type, Type>(entityType.Name, x, entityType);
+                    var link = inter.GenericTypeArguments[0];
+                    var entityLinkDef = link.GetSuperclassDefinition(typeof(EntityLink<>));
+                    if (entityLinkDef is not null)
+                    {
+                        var entityType = entityLinkDef.GenericTypeArguments[0];
+                        return new Tuple<string, Type, Type>(entityType.Name, x, entityType);
+                    }
                 }
                 }
-            }
-            return null;
-        }).Where(x => x is not null).ToDictionary(x => x!.Item1, x => new Tuple<Type, Type>(x!.Item2, x!.Item3));
+
+                return null;
+            }).Where(x => x is not null);
+            FormInstanceTypes =
+                instancetypes.ToDictionary(x => x!.Item1, x => new Tuple<Type, Type>(x!.Item2, x!.Item3));
+        }
 
 
         if (!FormInstanceTypes.TryGetValue(category, out var result))
         if (!FormInstanceTypes.TryGetValue(category, out var result))
         {
         {

+ 6 - 6
prs.desktop/Panels/Jobs/ProjectsPanel.cs

@@ -100,12 +100,12 @@ public class ProjectsPanel : MasterDetailPanel<Job,ProjectsGrid,ProjectsPanelSet
     {
     {
         if (page is null)
         if (page is null)
             return;
             return;
-        var isvisible = _settings.VisiblePanels.TryGetValue(type.EntityName().Split('.').Last(), out bool visible)
-                ? visible
-                : true;
-        page.Tab.Visibility = isvisible
-            ? Visibility.Visible
-            : Visibility.Collapsed;
+        
+        page.Tab.Visibility = _settings.VisiblePanels.TryGetValue(type.EntityName().Split('.').Last(), out bool visible)
+            ? visible 
+                ? Visibility.Visible 
+                : Visibility.Collapsed
+            : Visibility.Visible;
     }
     }
 
 
     private void SetStockRelease()
     private void SetStockRelease()

+ 7 - 0
prs.desktop/Panels/Products/Master List/ProductsGrid.cs

@@ -298,5 +298,12 @@ namespace PRSDesktop
                 }
                 }
             }
             }
         }
         }
+
+        protected override void DoValidate(Product[] items, List<string> errors)
+        {
+            base.DoValidate(items, errors);
+            if (items.Any(x=>x.UnitOfMeasure.ID == Guid.Empty))
+                errors.Add("Unit of Measure may not be blank!");
+        }
     }
     }
 }
 }