using System.Collections.Generic; using System.Linq; using AyaNova.DataList; using AyaNova.Biz; using Newtonsoft.Json; namespace AyaNova.Models { internal sealed class DataListTableProcessingOptions : DataListProcessingBase { internal List Columns { get; set; } internal const int MaxPageSize = 1000; internal const int DefaultOffset = 0; internal const int DefaultLimit = 25; internal int? Offset { get; set; } internal int? Limit { get; set; } internal DataListTableProcessingOptions( DataListTableRequest request, IDataListProcessing dataList, DataListColumnView savedView, DataListSavedFilter savedFilter, long userId, AuthorizationRoles userRoles) { //set some values from request Limit = request.Limit; Offset = request.Offset; base.ClientCriteria = request.ClientCriteria; base.DataListKey = request.DataListKey; base.ClientTimeStamp = request.ClientTimeStamp; //SET COLUMNS Columns = JsonConvert.DeserializeObject>(savedView.Columns); //SET SORTBY base.SortBy = JsonConvert.DeserializeObject>(savedView.Sort); //SET FILTER if (request.FilterId != 0 && savedFilter != null) base.Filter = JsonConvert.DeserializeObject>(savedFilter.Filter); //ADD STATIC SERVER FILTERS List StaticServerFilterOptions = new List(); if (dataList is IDataListInternalCriteria) StaticServerFilterOptions = ((IDataListInternalCriteria)dataList).DataListInternalCriteria(userId, userRoles, request.ClientCriteria); //Add the internal filters into the listoptions existing filters //NOTE: There is currently no overlap between internal filtered columns and filters coming from the client foreach (DataListFilterOption dfo in StaticServerFilterOptions) base.Filter.Add(dfo); } internal List AllUniqueColumnKeysReferenced { get { return Columns.Union(base.Filter.Select(z => z.Column).ToList()).ToList(); } } } }