This commit is contained in:
2021-01-29 21:40:08 +00:00
parent 2e9c570272
commit 740323c67d
21 changed files with 55 additions and 40 deletions

View File

@@ -82,7 +82,7 @@ namespace AyaNova.DataList
} }
public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListBase dataListBase) public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListProcessingBase dataListBase)
{ {
List<DataListFilterOption> ret = new List<DataListFilterOption>(); List<DataListFilterOption> ret = new List<DataListFilterOption>();
//ClientCriteria MUST be CustomerId //ClientCriteria MUST be CustomerId

View File

@@ -11,10 +11,10 @@ namespace AyaNova.DataList
//Instantiate list object specified //Instantiate list object specified
//this is safe as it's only attempting to load assemblies in the AyaNova.DataList namespace so can't attempt to instantiate some random object or nefarious object //this is safe as it's only attempting to load assemblies in the AyaNova.DataList namespace so can't attempt to instantiate some random object or nefarious object
//returns null if doesn't exist //returns null if doesn't exist
internal static IDataList GetAyaDataList(string ListKey) internal static IDataListProcessing GetAyaDataList(string ListKey)
{ {
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly(); System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
return ass.CreateInstance($"AyaNova.DataList.{ListKey}") as IDataList; return ass.CreateInstance($"AyaNova.DataList.{ListKey}") as IDataListProcessing;
} }
//List all the datalist types available //List all the datalist types available
@@ -27,7 +27,7 @@ namespace AyaNova.DataList
foreach (System.Reflection.TypeInfo ti in ass.DefinedTypes) foreach (System.Reflection.TypeInfo ti in ass.DefinedTypes)
{ {
if (!ti.IsAbstract && ti.ImplementedInterfaces.Contains(typeof(IDataList))) if (!ti.IsAbstract && ti.ImplementedInterfaces.Contains(typeof(IDataListProcessing)))
{ {
ret.Add(ti.Name); ret.Add(ti.Name);
} }

View File

@@ -31,6 +31,9 @@ namespace AyaNova.DataList
if (!userRoles.HasAnyFlags(DataList.AllowedRoles)) if (!userRoles.HasAnyFlags(DataList.AllowedRoles))
throw new System.UnauthorizedAccessException("User roles insufficient for this datalist"); throw new System.UnauthorizedAccessException("User roles insufficient for this datalist");
//turn the DataListTableRequest into a
DataList.SetListOptionDefaultsIfNecessary(dataListTableOptions); DataList.SetListOptionDefaultsIfNecessary(dataListTableOptions);
@@ -258,7 +261,7 @@ namespace AyaNova.DataList
// if (string.IsNullOrWhiteSpace(listView)) // if (string.IsNullOrWhiteSpace(listView))
// listView = DataList.DefaultListView; // listView = DataList.DefaultListView;
DataList.SetListOptionDefaultsIfNecessary(dataListSelectionOptions); DataList.ProcessRequest(dataListSelectionOptions);
// //parse the list view // //parse the list view
// var ListViewArray = JArray.Parse(listView); // var ListViewArray = JArray.Parse(listView);

View File

@@ -12,7 +12,7 @@ namespace AyaNova.DataList
/// <summary> /// <summary>
/// DataList object base class /// DataList object base class
/// </summary> /// </summary>
internal abstract class DataListProcessingBase : IDataList internal abstract class DataListProcessingBase : IDataListProcessing
{ {
//CoreBizObject add here //CoreBizObject add here
//well, not here exactly but add a new DATALIST class if it will be displayed as a list anywhere in the UI or reported on //well, not here exactly but add a new DATALIST class if it will be displayed as a list anywhere in the UI or reported on
@@ -40,7 +40,7 @@ namespace AyaNova.DataList
public Dictionary<string, string> DefaultSortBy { get; set; } public Dictionary<string, string> DefaultSortBy { get; set; }
//set defaults if not provided in listOptions //set defaults if not provided in listOptions
public void SetListOptionDefaultsIfNecessary(DataListBase listOptions) public void ProcessRequest(Models.DataListProcessingBase listOptions)
{ {
//columns, filter and sortby could all be null //columns, filter and sortby could all be null
if (listOptions.Filter == null) if (listOptions.Filter == null)

View File

@@ -11,7 +11,7 @@ namespace AyaNova.DataList
{ {
public static class DataListSqlFilterCriteriaBuilder public static class DataListSqlFilterCriteriaBuilder
{ {
public static string DataFilterToSQLCriteria(List<DataListFieldDefinition> objectFieldsList, Models.DataListBase listOptions) public static string DataFilterToSQLCriteria(List<DataListFieldDefinition> objectFieldsList, Models.DataListProcessingBase listOptions)
{ {
if (listOptions.Filter == null || listOptions.Filter.Count == 0) if (listOptions.Filter == null || listOptions.Filter.Count == 0)

View File

@@ -10,7 +10,7 @@ namespace AyaNova.DataList
{ {
public static string DataFilterToSQLOrderBy(List<DataListFieldDefinition> objectFieldsList, Models.DataListBase listOptions) public static string DataFilterToSQLOrderBy(List<DataListFieldDefinition> objectFieldsList, Models.DataListProcessingBase listOptions)
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();

View File

@@ -6,6 +6,6 @@ namespace AyaNova.DataList
//Additional criteria for security or other reasons //Additional criteria for security or other reasons
//hard coded into some lists (e.g. MemoDataList so users can't get other people's memos) //hard coded into some lists (e.g. MemoDataList so users can't get other people's memos)
//clientCriteria is additional criteria provided by client to list to process as it sees fit (e.g. CustomerNoteDataList requires customer id from client) //clientCriteria is additional criteria provided by client to list to process as it sees fit (e.g. CustomerNoteDataList requires customer id from client)
System.Collections.Generic.List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AyaNova.Biz.AuthorizationRoles userRoles, Models.DataListBase dataListBase); System.Collections.Generic.List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AyaNova.Biz.AuthorizationRoles userRoles, Models.DataListProcessingBase dataListBase);
} }
} }

View File

@@ -4,7 +4,7 @@ using AyaNova.Biz;
using AyaNova.Models; using AyaNova.Models;
namespace AyaNova.DataList namespace AyaNova.DataList
{ {
internal interface IDataList internal interface IDataListProcessing
{ {
//sql query from fragment with table joins et //sql query from fragment with table joins et
@@ -23,7 +23,7 @@ namespace AyaNova.DataList
List<string> DefaultColumns { get; set; } List<string> DefaultColumns { get; set; }
Dictionary<string, string> DefaultSortBy { get; set; } Dictionary<string, string> DefaultSortBy { get; set; }
void SetListOptionDefaultsIfNecessary(Models.DataListBase listOptions); void ProcessRequest(Models.DataListProcessingBase listOptions);
Newtonsoft.Json.Linq.JArray GenerateReturnListColumns(List<string> columns); Newtonsoft.Json.Linq.JArray GenerateReturnListColumns(List<string> columns);
// List<string> GetFieldListFromListView(JArray listViewArray); // List<string> GetFieldListFromListView(JArray listViewArray);

View File

@@ -115,7 +115,7 @@ namespace AyaNova.DataList
}); });
} }
public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListBase dataListBase) public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListProcessingBase dataListBase)
{ {
List<DataListFilterOption> ret = new List<DataListFilterOption>(); List<DataListFilterOption> ret = new List<DataListFilterOption>();

View File

@@ -136,7 +136,7 @@ namespace AyaNova.DataList
} }
public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListBase dataListBase) public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListProcessingBase dataListBase)
{ {
List<DataListFilterOption> ret = new List<DataListFilterOption>(); List<DataListFilterOption> ret = new List<DataListFilterOption>();

View File

@@ -120,7 +120,7 @@ namespace AyaNova.DataList
}); });
} }
public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListBase dataListBase) public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListProcessingBase dataListBase)
{ {
List<DataListFilterOption> ret = new List<DataListFilterOption>(); List<DataListFilterOption> ret = new List<DataListFilterOption>();

View File

@@ -116,7 +116,7 @@ namespace AyaNova.DataList
} }
public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListBase dataListBase) public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListProcessingBase dataListBase)
{ {
List<DataListFilterOption> ret = new List<DataListFilterOption>(); List<DataListFilterOption> ret = new List<DataListFilterOption>();

View File

@@ -130,7 +130,7 @@ namespace AyaNova.DataList
} }
public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListBase dataListBase) public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListProcessingBase dataListBase)
{ {
List<DataListFilterOption> ret = new List<DataListFilterOption>(); List<DataListFilterOption> ret = new List<DataListFilterOption>();

View File

@@ -117,7 +117,7 @@ namespace AyaNova.DataList
} }
//Ensure only current user can fetch their reminders //Ensure only current user can fetch their reminders
public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListBase dataListBase) public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListProcessingBase dataListBase)
{ {
List<DataListFilterOption> ret = new List<DataListFilterOption>(); List<DataListFilterOption> ret = new List<DataListFilterOption>();

View File

@@ -207,7 +207,7 @@ namespace AyaNova.DataList
// return "[]";//this means effectively don't process this at all // return "[]";//this means effectively don't process this at all
// } // }
public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListBase dataListBase) public List<DataListFilterOption> DataListInternalCriteria(long currentUserId, AuthorizationRoles userRoles, Models.DataListProcessingBase dataListBase)
{ {
List<DataListFilterOption> ret = new List<DataListFilterOption>(); List<DataListFilterOption> ret = new List<DataListFilterOption>();
bool HasSupervisorRole = bool HasSupervisorRole =

View File

@@ -0,0 +1,9 @@
using System.Collections.Generic;
namespace AyaNova.Models
{
public class DataListColumnFilter
{
public string op { get; set; }
public string value { get; set; }
}
}

View File

@@ -2,20 +2,7 @@ using System.Collections.Generic;
namespace AyaNova.Models namespace AyaNova.Models
{ {
//common base class for data table display at client, reporting and mass bulk operations
public class DataListBase
{
public string DataListKey { get; set; }
public Dictionary<string, string> SortBy { get; set; }
public List<DataListFilterOption> Filter { get; set; }
public string ClientCriteria { get; set; }
public DataListBase()
{
SortBy = new Dictionary<string, string>();
Filter = new List<DataListFilterOption>();
}
}
/* /*
OLD EXAMPLE: OLD EXAMPLE:
@@ -52,9 +39,4 @@ namespace AyaNova.Models
} }
} }
public class DataListColumnFilter
{
public string op { get; set; }
public string value { get; set; }
}
} }

View File

@@ -0,0 +1,21 @@
using System.Collections.Generic;
namespace AyaNova.Models
{
//common base class for data table display at client, reporting and mass bulk operations
public class DataListProcessingBase
{
public string DataListKey { get; set; }
public Dictionary<string, string> SortBy { get; set; }
public List<DataListFilterOption> Filter { get; set; }
public string ClientCriteria { get; set; }
public DataListProcessingBase()
{
SortBy = new Dictionary<string, string>();
Filter = new List<DataListFilterOption>();
}
}
}

View File

@@ -3,7 +3,7 @@ namespace AyaNova.Models
{ {
//Request version of selection request used by report and bulk ops //Request version of selection request used by report and bulk ops
//handles posts from client //handles posts from client
public class DataListSelectedRequest : DataListBase public class DataListSelectedRequest : DataListProcessingBase
{ {
public AyaType ObjectType { get; set; } public AyaType ObjectType { get; set; }
public long[] SelectedRowIds { get; set; } public long[] SelectedRowIds { get; set; }

View File

@@ -5,7 +5,7 @@ namespace AyaNova.Models
//Used to drive processes that rely on selections made at client from a datalist //Used to drive processes that rely on selections made at client from a datalist
//either a preselected list of id's or a datalist key and listview filter object that can //either a preselected list of id's or a datalist key and listview filter object that can
//be used to rehydrate a list of id's //be used to rehydrate a list of id's
public class DataListSelectionOptions : DataListBase public class DataListSelectionOptions : DataListProcessingBase
{ {
public AyaType ObjectType { get; set; } public AyaType ObjectType { get; set; }
public long[] SelectedRowIds { get; set; } public long[] SelectedRowIds { get; set; }

View File

@@ -3,7 +3,7 @@ using System.Collections.Generic;
namespace AyaNova.Models namespace AyaNova.Models
{ {
public sealed class DataListTableOptions : DataListBase public sealed class DataListTableOptions : DataListProcessingBase
{ {
public List<string> Columns { get; set; } public List<string> Columns { get; set; }
public const int MaxPageSize = 1000; public const int MaxPageSize = 1000;