using System.Threading.Tasks; using AyaNova.Biz; using System.Collections.Generic; using AyaNova.DataList; using Newtonsoft.Json; using EnumsNET; namespace AyaNova.Models { //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 filterid that can //be used to rehydrate a list of id's public class DataListSelectedProcessingOptions : DataListProcessingBase { internal DataListSelectedProcessingOptions( DataListSelectedRequest request, IDataListProcessing dataList, DataListColumnView savedView, DataListSavedFilter savedFilter, long userId, AuthorizationRoles userRoles) { //set some values from request base.ClientCriteria = request.ClientCriteria; base.DataListKey = request.DataListKey; base.ClientTimeStamp = request.ClientTimeStamp; //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); } public static async Task RehydrateIdList(DataListSelectedRequest selectedRequest, AyContext ct, AuthorizationRoles userRoles, Microsoft.Extensions.Logging.ILogger log, long userId, long userTranslationId) { DataListColumnViewBiz viewbiz = new DataListColumnViewBiz(ct, userId, userTranslationId, userRoles); var SavedView = await viewbiz.GetAsync(userId, selectedRequest.DataListKey, true); DataListSavedFilter SavedFilter = null; if (selectedRequest.FilterId != 0) { DataListSavedFilterBiz filterbiz = new DataListSavedFilterBiz(ct, userId, userTranslationId, userRoles); SavedFilter = await filterbiz.GetAsync(selectedRequest.FilterId); } var DataList = DataListFactory.GetAyaDataList(selectedRequest.DataListKey, userTranslationId); if (DataList == null) throw new System.ArgumentOutOfRangeException($"DataList \"{selectedRequest.DataListKey}\" specified does not exist"); //check rights if (!userRoles.HasAnyFlags(DataList.AllowedRoles)) throw new System.UnauthorizedAccessException($"DataList \"{selectedRequest.DataListKey}\" required Roles not found for this user"); DataListSelectedProcessingOptions d = new DataListSelectedProcessingOptions(selectedRequest, DataList, SavedView, SavedFilter, userId, userRoles); return await AyaNova.DataList.DataListFetcher.GetIdListResponseAsync(ct, d, DataList, userRoles, log, userId, selectedRequest.ReportDesignerSample); } } }