Przeglądaj źródła

Added SortOrder functionality to DataModel classes

frogsoftware 1 tydzień temu
rodzic
commit
46c63f81e6

+ 1 - 0
InABox.Avalonia.Platform.Desktop/InABox.Avalonia.Platform.Desktop.csproj

@@ -21,6 +21,7 @@
         <PackageReference Include="SkiaSharp" Version="2.88.9" />
         <PackageReference Include="Syncfusion.Pdf.Wpf" Version="29.2.7" />
         <PackageReference Include="Syncfusion.PdfToImageConverter.WPF" Version="29.2.7" />
+        <PackageReference Include="System.Drawing.Common" Version="9.0.0" />
     </ItemGroup>
     
 </Project>

+ 1 - 1
InABox.Client.RPC/InABox.Client.RPC.csproj

@@ -11,7 +11,7 @@
     </ItemGroup>
 
     <ItemGroup>
-      <PackageReference Include="H.Formatters" Version="15.0.0" />
+      <PackageReference Include="H.Formatters" Version="2.0.59" />
       <PackageReference Include="H.Formatters.BinaryFormatter" Version="2.0.59" />
       <PackageReference Include="H.Pipes" Version="2.0.59" />
       <PackageReference Include="WebSocket4Net" Version="0.15.2" />

+ 4 - 4
InABox.Core/DataModel/AutoDataModel.cs

@@ -158,15 +158,15 @@ namespace InABox.Core
             }
 
             foreach (var child in children)
-                child.Item1.Invoke(this, new object?[] { child.Item2, child.Item3, null, child.Item4, false, null, child.Item5 });
+                child.Item1.Invoke(this, new object?[] { child.Item2, child.Item3, null, child.Item4, null, false, null, child.Item5 });
             foreach (var lookup in lookups)
-                lookup.Item1.Invoke(this, new object?[] { lookup.Item2, lookup.Item3, null, null, false, null, lookup.Item4 });
+                lookup.Item1.Invoke(this, new object?[] { lookup.Item2, lookup.Item3, null, null, null, false, null, lookup.Item4 });
             foreach (var manyToMany0 in manyToManys0)
                 manyToMany0.Item1.Invoke(this,
-                    new object?[] { manyToMany0.Item2, manyToMany0.Item3, null, manyToMany0.Item4, false, null, manyToMany0.Item5 });
+                    new object?[] { manyToMany0.Item2, manyToMany0.Item3, null, manyToMany0.Item4, null, false, null, manyToMany0.Item5 });
             foreach (var manyToMany1 in manyToManys1)
                 manyToMany1.Item1.Invoke(this,
-                    new object?[] { manyToMany1.Item2, manyToMany1.Item3, null, null, false, manyToMany1.Item4, manyToMany1.Item5 });
+                    new object?[] { manyToMany1.Item2, manyToMany1.Item3, null, null, null, false, manyToMany1.Item4, manyToMany1.Item5 });
         }
 
         public AutoDataModel(Filter<T>? filter): this(filter, null, null) { }

+ 56 - 17
InABox.Core/DataModel/DataModel.cs

@@ -102,7 +102,7 @@ namespace InABox.Core
         /// <see langword="true"/> if this table should be loaded - in some cases a table's data should loaded manually.<br/>
         /// Set to <see langword="false"/> if this is the case.
         /// </param>
-        void AddTable<TType>(Filter<TType>? filter, Columns<TType>? columns, bool isdefault = false, string? alias = null, bool shouldLoad = true);
+        void AddTable<TType>(Filter<TType>? filter, Columns<TType>? columns, SortOrder<TType>? sort, bool isdefault = false, string? alias = null, bool shouldLoad = true);
         void LinkTable(Type parenttype, string parentcolumn, Type childtype, string childcolumn, string? parentalias = null, string? childalias = null, bool isLookup = false);
         void LinkTable(Type parenttype, string parentcolumn, string childalias, string childcolumn, string? parentalias = null, bool isLookup = false);
 
@@ -110,11 +110,11 @@ namespace InABox.Core
             string? childalias = null, bool isLookup = false);
 
         void AddChildTable<TParent, TChild>(Expression<Func<TParent, object>> parentcolumn, Expression<Func<TChild, object>> childcolumn,
-            Filter<TChild>? filter = null, Columns<TChild>? columns = null, bool isdefault = false, string? parentalias = null,
+            Filter<TChild>? filter = null, Columns<TChild>? columns = null, SortOrder<TChild>? sort = null, bool isdefault = false, string? parentalias = null,
             string? childalias = null);
 
         void AddLookupTable<TSource, TLookup>(Expression<Func<TSource, object>> sourcecolumn, Expression<Func<TLookup, object>> lookupcolumn,
-            Filter<TLookup>? filter = null, Columns<TLookup>? columns = null, bool isdefault = false, string? sourcealias = null,
+            Filter<TLookup>? filter = null, Columns<TLookup>? columns = null, SortOrder<TLookup>? sort = null, bool isdefault = false, string? sourcealias = null,
             string? lookupalias = null);
 
         /// <summary>
@@ -139,7 +139,15 @@ namespace InABox.Core
         /// <param name="alias">The name of the table, defaulting to <typeparamref name="TType"/></param>
         /// <returns>The columns.</returns>
         Columns<TType>? GetColumns<TType>(string? alias = null);
-
+        
+        /// <summary>
+        /// Gets the sort order for a given table, which is used during <see cref="LoadModel(IEnumerable{string}, IDataModelQueryDef[]).
+        /// </summary>
+        /// <typeparam name="TType">The type of the table to get the columns of.</typeparam>
+        /// <param name="alias">The name of the table, defaulting to <typeparamref name="TType"/></param>
+        /// <returns>The sort order.</returns>
+        SortOrder<TType>? GetSortOrder<TType>(string? alias = null);
+        
         /// <summary>
         /// Sets the filter for a given table, which is used during <see cref="LoadModel(IEnumerable{string}, IDataModelQueryDef[]).
         /// </summary>
@@ -147,6 +155,7 @@ namespace InABox.Core
         /// <param name="filter">The new filter.</param>
         /// <param name="alias">The name of the table, defaulting to <typeparamref name="TType"/></param>
         void SetFilter<TType>(Filter<TType>? filter, string? alias = null);
+        
         /// <summary>
         /// Sets the columns for a given table, which are used during <see cref="LoadModel(IEnumerable{string}, IDataModelQueryDef[]).
         /// </summary>
@@ -154,6 +163,16 @@ namespace InABox.Core
         /// <param name="columns">The new columns.</param>
         /// <param name="alias">The name of the table, defaulting to <typeparamref name="TType"/>.</param>
         void SetColumns<TType>(Columns<TType>? columns, string? alias = null);
+        
+        /// <summary>
+        /// Sets the sort order for a given table, which are used during <see cref="LoadModel(IEnumerable{string}, IDataModelQueryDef[]).
+        /// </summary>
+        /// <typeparam name="TType">The type of the table.</typeparam>
+        /// <param name="sort">The new sort order.</param>
+        /// <param name="alias">The name of the table, defaulting to <typeparamref name="TType"/>.</param>
+        void SetSortOrder<TType>(SortOrder<TType>? sort, string? alias = null);
+
+        
         void SetIsDefault<TType>(bool isDefault, string? alias = null);
         void SetShouldLoad<TType>(bool shouldLoad, string? alias = null);
 
@@ -186,10 +205,10 @@ namespace InABox.Core
 
         public DataModel()
         {
-            AddTable<CompanyInformation>(null, null, true);
-            AddChildTable<CompanyInformation, Document>(x => x.Logo.ID, x => x.ID, null, null, true, null, "CompanyLogo");
+            AddTable<CompanyInformation>(null, null, null, true);
+            AddChildTable<CompanyInformation, Document>(x => x.Logo.ID, x => x.ID, null, null, null, true, null, "CompanyLogo");
 
-            AddTable(new Filter<User>(x => x.ID).IsEqualTo(ClientFactory.UserGuid), null, true);
+            AddTable(new Filter<User>(x => x.ID).IsEqualTo(ClientFactory.UserGuid), null, null, true);
         }
 
         public IEnumerable<KeyValuePair<string, DataModelTable>> ModelTables => _tables;
@@ -341,14 +360,15 @@ namespace InABox.Core
         {
             private bool shouldLoad;
 
-            public DataModelTable(Type? type, CoreTable table, bool isDefault, IFilter? filter, IColumns? columns, bool shouldLoad = true)
+            public DataModelTable(Type? type, CoreTable table, bool isDefault, IFilter? filter, IColumns? columns, ISortOrder? sort, bool? shouldLoad = true)
             {
                 Type = type;
                 Table = table;
                 IsDefault = isDefault;
                 Filter = filter;
                 Columns = columns;
-                ShouldLoad = shouldLoad;
+                Sort = sort;
+                ShouldLoad = shouldLoad ?? true;
             }
 
             public Type? Type { get; }
@@ -360,6 +380,8 @@ namespace InABox.Core
             public IFilter? Filter { get; set; }
 
             public IColumns? Columns { get; set; }
+            
+            public ISortOrder? Sort { get; set; }
 
             public bool ShouldLoad
             {
@@ -515,7 +537,7 @@ namespace InABox.Core
         {
             var name = TableName(type, alias);
             if (!_tables.ContainsKey(name))
-                _tables[name] = new DataModelTable(type, table, isdefault, null, null, false);
+                _tables[name] = new DataModelTable(type, table, isdefault, null, null, null, false);
             else
                 throw new Exception(string.Format("[{0}] already exists in this data model!", name));
         }
@@ -568,7 +590,7 @@ namespace InABox.Core
 
         public void AddTable(string alias, CoreTable table, bool isdefault = false) => AddTable(null, table, isdefault, alias);
 
-        public void AddTable<TType>(Filter<TType>? filter, Columns<TType>? columns, bool isdefault = false, string? alias = null, bool shouldLoad = true)
+        public void AddTable<TType>(Filter<TType>? filter, Columns<TType>? columns, SortOrder<TType>? sort, bool isdefault = false, string? alias = null, bool shouldLoad = true)
         {
             var name = TableName<TType>(alias);
             if (!_tables.ContainsKey(name))
@@ -582,24 +604,24 @@ namespace InABox.Core
                 {
                     table.LoadColumns(typeof(TType));
                 }
-                _tables[name] = new DataModelTable(typeof(TType), table, isdefault, filter, columns, shouldLoad);
+                _tables[name] = new DataModelTable(typeof(TType), table, isdefault, filter, columns, sort, shouldLoad);
             }
         }
 
         public void AddChildTable<TParent, TChild>(Expression<Func<TParent, object>> parentcolumn, Expression<Func<TChild, object>> childcolumn,
-            Filter<TChild>? filter = null, Columns<TChild>? columns = null, bool isdefault = false, string? parentalias = null, string? childalias = null)
+            Filter<TChild>? filter = null, Columns<TChild>? columns = null, SortOrder<TChild>? sort = null, bool isdefault = false, string? parentalias = null, string? childalias = null)
         {
             CheckTable<TParent>(parentalias);
-            AddTable(filter, columns, isdefault, childalias);
+            AddTable(filter, columns, sort, isdefault, childalias);
             LinkTable(parentcolumn, childcolumn, parentalias, childalias, false);
         }
 
         public void AddLookupTable<TSource, TLookup>(Expression<Func<TSource, object>> sourcecolumn, Expression<Func<TLookup, object>> lookupcolumn,
-            Filter<TLookup>? filter = null, Columns<TLookup>? columns = null, bool isdefault = false,
+            Filter<TLookup>? filter = null, Columns<TLookup>? columns = null, SortOrder<TLookup>? sort = null, bool isdefault = false,
             string? sourcealias = null, string? lookupalias = null)
         {
             CheckTable<TSource>(sourcealias);
-            AddTable(filter, columns, isdefault, lookupalias);
+            AddTable(filter, columns, sort, isdefault, lookupalias);
             LinkTable(sourcecolumn, lookupcolumn, sourcealias, lookupalias, true);
         }
 
@@ -664,6 +686,17 @@ namespace InABox.Core
             var table = GetDataModelTable(alias);
             return table.Columns;
         }
+        
+        public SortOrder<TType>? GetSortOrder<TType>(string? alias = null)
+        {
+            var table = GetDataModelTable<TType>(alias);
+            return table.Sort as SortOrder<TType>;
+        }
+        public ISortOrder? GetSortOrder(string alias)
+        {
+            var table = GetDataModelTable(alias);
+            return table.Sort;
+        }
 
         [Obsolete("Use SetColumns instead")]
         public void SetTableColumns<TType>(Columns<TType> columns, string? alias = null) => SetColumns(columns, alias);
@@ -679,6 +712,12 @@ namespace InABox.Core
             var table = GetDataModelTable<TType>(alias);
             table.Columns = columns;
         }
+        
+        public void SetSortOrder<TType>(SortOrder<TType>? sort, string? alias = null)
+        {
+            var table = GetDataModelTable<TType>(alias);
+            table.Sort = sort;
+        }
 
         public void SetIsDefault<TType>(bool isDefault, string? alias = null)
         {
@@ -760,7 +799,7 @@ namespace InABox.Core
             Columns = columns;
             Sort = sort;
 
-            AddTable(filter, columns, true);
+            AddTable(filter, columns, sort, true);
             AddChildTable<T, AuditTrail>(x => x.ID, x => x.EntityID);
         }