From 0e8b90a77889a83ac8be275701864decadfbe3fb Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Sat, 30 Jan 2021 16:08:13 +0000 Subject: [PATCH] --- .../AyaNova/Controllers/ReportController.cs | 42 ++++----- server/AyaNova/biz/ReportBiz.cs | 18 ++-- .../DataListSelectedProcessingOptions.cs | 89 +++++++++++-------- 3 files changed, 83 insertions(+), 66 deletions(-) diff --git a/server/AyaNova/Controllers/ReportController.cs b/server/AyaNova/Controllers/ReportController.cs index 6729a0c6..af6036a3 100644 --- a/server/AyaNova/Controllers/ReportController.cs +++ b/server/AyaNova/Controllers/ReportController.cs @@ -198,32 +198,32 @@ namespace AyaNova.Api.Controllers return BadRequest(new ApiErrorResponse(ModelState)); - //------------------------------- - var UserRoles = UserRolesFromContext.Roles(HttpContext.Items); - var UserId = UserIdFromContext.Id(HttpContext.Items); - DataListSavedColumnViewBiz viewbiz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext); - var SavedView = await viewbiz.GetAsync(UserId, selectedRequest.DataListKey, true); + // //------------------------------- + // var UserRoles = UserRolesFromContext.Roles(HttpContext.Items); + // var UserId = UserIdFromContext.Id(HttpContext.Items); + // DataListSavedColumnViewBiz viewbiz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext); + // var SavedView = await viewbiz.GetAsync(UserId, selectedRequest.DataListKey, true); - DataListSavedFilter SavedFilter = null; - if (selectedRequest.FilterId != 0) - { - DataListSavedFilterBiz filterbiz = DataListSavedFilterBiz.GetBiz(ct, HttpContext); - SavedFilter = await filterbiz.GetAsync(selectedRequest.FilterId, false); - } - var DataList = DataListFactory.GetAyaDataList(selectedRequest.DataListKey); - if (DataList == null) - return BadRequest(new ApiErrorResponse(ApiErrorCode.NOT_FOUND, "DataListKey", $"DataList \"{selectedRequest.DataListKey}\" specified does not exist")); + // DataListSavedFilter SavedFilter = null; + // if (selectedRequest.FilterId != 0) + // { + // DataListSavedFilterBiz filterbiz = DataListSavedFilterBiz.GetBiz(ct, HttpContext); + // SavedFilter = await filterbiz.GetAsync(selectedRequest.FilterId, false); + // } + // var DataList = DataListFactory.GetAyaDataList(selectedRequest.DataListKey); + // if (DataList == null) + // return BadRequest(new ApiErrorResponse(ApiErrorCode.NOT_FOUND, "DataListKey", $"DataList \"{selectedRequest.DataListKey}\" specified does not exist")); - //check rights - if (!UserRoles.HasAnyFlags(DataList.AllowedRoles)) - return StatusCode(403, new ApiNotAuthorizedResponse()); + // //check rights + // if (!UserRoles.HasAnyFlags(DataList.AllowedRoles)) + // return StatusCode(403, new ApiNotAuthorizedResponse()); - //hydrate the saved view and filter - DataListSelectedProcessingOptions dataListSelectedOptions = new DataListSelectedProcessingOptions(selectedRequest, DataList, SavedView, SavedFilter, UserId, UserRoles); - //------------------------ + // //hydrate the saved view and filter + // DataListSelectedProcessingOptions dataListSelectedOptions = new DataListSelectedProcessingOptions(selectedRequest, DataList, SavedView, SavedFilter, UserId, UserRoles); + // //------------------------ - var reportData = await biz.GetReportData(dataListSelectedOptions); + var reportData = await biz.GetReportData(selectedRequest); if (reportData == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else diff --git a/server/AyaNova/biz/ReportBiz.cs b/server/AyaNova/biz/ReportBiz.cs index 6c300912..f517b34a 100644 --- a/server/AyaNova/biz/ReportBiz.cs +++ b/server/AyaNova/biz/ReportBiz.cs @@ -331,27 +331,29 @@ namespace AyaNova.Biz //REPORT DATA //Data fetched to return to report designer for Client report design usage - public async Task GetReportData(DataListSelectedProcessingOptions dataListSelection) + public async Task GetReportData(DataListSelectedRequest selectedRequest) { var log = AyaNova.Util.ApplicationLogging.CreateLogger("ReportBiz::GetReportData"); AuthorizationRoles effectiveRoles = CurrentUserRoles; - if (!AyaNova.Api.ControllerHelpers.Authorized.HasReadFullRole(effectiveRoles, dataListSelection.ObjectType)) + if (!AyaNova.Api.ControllerHelpers.Authorized.HasReadFullRole(effectiveRoles, selectedRequest.ObjectType)) { - AddError(ApiErrorCode.NOT_AUTHORIZED, null, $"User not authorized for {dataListSelection.ObjectType} type object"); + AddError(ApiErrorCode.NOT_AUTHORIZED, null, $"User not authorized for {selectedRequest.ObjectType} type object"); return null; } //Do we need to rehydrate the ID List from a DataList? // if (dataListSelection.SelectedRowIds.Length == 0) // dataListSelection.SelectedRowIds = await AyaNova.DataList.DataListFetcher.GetIdListResponseAsync(dataListSelection.DataListKey, dataListSelection.ListView, dataListSelection.MetaView, ct, effectiveRoles, log, UserId); - await dataListSelection.RehydrateIdList(ct, effectiveRoles, log, UserId); + if(selectedRequest.SelectedRowIds.Length==0) + selectedRequest.SelectedRowIds = await DataListSelectedProcessingOptions.RehydrateIdList(selectedRequest, ct, effectiveRoles, log, UserId, UserTranslationId); - log.LogDebug($"Instantiating biz object handler for {dataListSelection.ObjectType}"); - var biz = BizObjectFactory.GetBizObject(dataListSelection.ObjectType, ct); - log.LogDebug($"Fetching data for {dataListSelection.SelectedRowIds.Length} {dataListSelection.ObjectType} items"); - return await ((IReportAbleObject)biz).GetReportData(dataListSelection.SelectedRowIds); + + log.LogDebug($"Instantiating biz object handler for {selectedRequest.ObjectType}"); + var biz = BizObjectFactory.GetBizObject(selectedRequest.ObjectType, ct); + log.LogDebug($"Fetching data for {selectedRequest.SelectedRowIds.Length} {selectedRequest.ObjectType} items"); + return await ((IReportAbleObject)biz).GetReportData(selectedRequest.SelectedRowIds); } diff --git a/server/AyaNova/models/DataListSelectedProcessingOptions.cs b/server/AyaNova/models/DataListSelectedProcessingOptions.cs index 3cea481e..b2d2a4a8 100644 --- a/server/AyaNova/models/DataListSelectedProcessingOptions.cs +++ b/server/AyaNova/models/DataListSelectedProcessingOptions.cs @@ -1,5 +1,9 @@ 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 @@ -7,50 +11,24 @@ namespace AyaNova.Models //be used to rehydrate a list of id's public class DataListSelectedProcessingOptions : DataListProcessingBase { - public AyaType ObjectType { get; set; } - public long[] SelectedRowIds { get; set; } + //public AyaType ObjectType { get; set; } + // public long[] SelectedRowIds { get; set; } // public string DataListKey { get; set; } // public string ListView { get; set; }//optional, if null or empty will use default list view built into DataList // public string MetaView { get; set; }//optional meta list view to integrate into the standard list view. Used by client to add "meta" filter conditions above the user's choices e.g. customer notes customer id - - public bool IsEmpty + internal DataListSelectedProcessingOptions( + DataListSelectedRequest request, + IDataListProcessing dataList, + DataListSavedColumnView savedView, + DataListSavedFilter savedFilter, + long userId, + AuthorizationRoles userRoles) { - get - { - return SelectedRowIds.LongLength == 0 && string.IsNullOrWhiteSpace(DataListKey); - } - } - -///TODO: recode this to fulfil requirements of datalistfetcher in the same way as -//DataListTableProcessingOptions constructor -//clean out datalistfetcher comments and similar afterwards - public async Task RehydrateIdList(AyContext ct, AuthorizationRoles userRoles, Microsoft.Extensions.Logging.ILogger log, long userId) - { - if (SelectedRowIds.Length == 0) - SelectedRowIds = await AyaNova.DataList.DataListFetcher.GetIdListResponseAsync(ct, this, userRoles, log, userId); - } - } -} - -/* - internal DataListTableProcessingOptions( - DataListTableRequest request, - IDataListProcessing dataList, - DataListSavedColumnView savedView, - DataListSavedFilter savedFilter, - long userId, - AuthorizationRoles userRoles) - { - //set some values from request - Limit = request.Limit; - Offset = request.Offset; + //set some values from request base.ClientCriteria = request.ClientCriteria; base.DataListKey = request.DataListKey; - //SET COLUMNS - Columns = JsonConvert.DeserializeObject>(savedView.Columns); - //SET SORTBY base.SortBy = JsonConvert.DeserializeObject>(savedView.Sort); @@ -69,4 +47,41 @@ namespace AyaNova.Models base.Filter.Add(dfo); } -*/ \ No newline at end of file + + + public static async Task RehydrateIdList(DataListSelectedRequest selectedRequest, AyContext ct, AuthorizationRoles userRoles, Microsoft.Extensions.Logging.ILogger log, long userId, long userTranslationId) + { + DataListSavedColumnViewBiz viewbiz = new DataListSavedColumnViewBiz(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, false); + } + var DataList = DataListFactory.GetAyaDataList(selectedRequest.DataListKey); + 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); + + //hydrate the saved view and filter + // DataListSelectedProcessingOptions dataListSelectedOptions = new DataListSelectedProcessingOptions(selectedRequest, DataList, SavedView, SavedFilter, UserId, UserRoles); + // //------------------------ + + + // if (SelectedRowIds.Length == 0) + // SelectedRowIds = await AyaNova.DataList.DataListFetcher.GetIdListResponseAsync(ct, this, userRoles, log, userId); + + return await AyaNova.DataList.DataListFetcher.GetIdListResponseAsync(ct, d, DataList, userRoles, log, userId); + } + + + } +} +