This commit is contained in:
2021-01-30 16:08:13 +00:00
parent 6be01deba6
commit 0e8b90a778
3 changed files with 83 additions and 66 deletions

View File

@@ -198,32 +198,32 @@ namespace AyaNova.Api.Controllers
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
//------------------------------- // //-------------------------------
var UserRoles = UserRolesFromContext.Roles(HttpContext.Items); // var UserRoles = UserRolesFromContext.Roles(HttpContext.Items);
var UserId = UserIdFromContext.Id(HttpContext.Items); // var UserId = UserIdFromContext.Id(HttpContext.Items);
DataListSavedColumnViewBiz viewbiz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext); // DataListSavedColumnViewBiz viewbiz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext);
var SavedView = await viewbiz.GetAsync(UserId, selectedRequest.DataListKey, true); // var SavedView = await viewbiz.GetAsync(UserId, selectedRequest.DataListKey, true);
DataListSavedFilter SavedFilter = null; // DataListSavedFilter SavedFilter = null;
if (selectedRequest.FilterId != 0) // if (selectedRequest.FilterId != 0)
{ // {
DataListSavedFilterBiz filterbiz = DataListSavedFilterBiz.GetBiz(ct, HttpContext); // DataListSavedFilterBiz filterbiz = DataListSavedFilterBiz.GetBiz(ct, HttpContext);
SavedFilter = await filterbiz.GetAsync(selectedRequest.FilterId, false); // SavedFilter = await filterbiz.GetAsync(selectedRequest.FilterId, false);
} // }
var DataList = DataListFactory.GetAyaDataList(selectedRequest.DataListKey); // var DataList = DataListFactory.GetAyaDataList(selectedRequest.DataListKey);
if (DataList == null) // if (DataList == null)
return BadRequest(new ApiErrorResponse(ApiErrorCode.NOT_FOUND, "DataListKey", $"DataList \"{selectedRequest.DataListKey}\" specified does not exist")); // return BadRequest(new ApiErrorResponse(ApiErrorCode.NOT_FOUND, "DataListKey", $"DataList \"{selectedRequest.DataListKey}\" specified does not exist"));
//check rights // //check rights
if (!UserRoles.HasAnyFlags(DataList.AllowedRoles)) // if (!UserRoles.HasAnyFlags(DataList.AllowedRoles))
return StatusCode(403, new ApiNotAuthorizedResponse()); // return StatusCode(403, new ApiNotAuthorizedResponse());
//hydrate the saved view and filter // //hydrate the saved view and filter
DataListSelectedProcessingOptions dataListSelectedOptions = new DataListSelectedProcessingOptions(selectedRequest, DataList, SavedView, SavedFilter, UserId, UserRoles); // 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) if (reportData == null)
return BadRequest(new ApiErrorResponse(biz.Errors)); return BadRequest(new ApiErrorResponse(biz.Errors));
else else

View File

@@ -331,27 +331,29 @@ namespace AyaNova.Biz
//REPORT DATA //REPORT DATA
//Data fetched to return to report designer for Client report design usage //Data fetched to return to report designer for Client report design usage
public async Task<Newtonsoft.Json.Linq.JArray> GetReportData(DataListSelectedProcessingOptions dataListSelection) public async Task<Newtonsoft.Json.Linq.JArray> GetReportData(DataListSelectedRequest selectedRequest)
{ {
var log = AyaNova.Util.ApplicationLogging.CreateLogger("ReportBiz::GetReportData"); var log = AyaNova.Util.ApplicationLogging.CreateLogger("ReportBiz::GetReportData");
AuthorizationRoles effectiveRoles = CurrentUserRoles; 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; return null;
} }
//Do we need to rehydrate the ID List from a DataList? //Do we need to rehydrate the ID List from a DataList?
// if (dataListSelection.SelectedRowIds.Length == 0) // if (dataListSelection.SelectedRowIds.Length == 0)
// dataListSelection.SelectedRowIds = await AyaNova.DataList.DataListFetcher.GetIdListResponseAsync(dataListSelection.DataListKey, dataListSelection.ListView, dataListSelection.MetaView, ct, effectiveRoles, log, UserId); // 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($"Instantiating biz object handler for {selectedRequest.ObjectType}");
log.LogDebug($"Fetching data for {dataListSelection.SelectedRowIds.Length} {dataListSelection.ObjectType} items"); var biz = BizObjectFactory.GetBizObject(selectedRequest.ObjectType, ct);
return await ((IReportAbleObject)biz).GetReportData(dataListSelection.SelectedRowIds); log.LogDebug($"Fetching data for {selectedRequest.SelectedRowIds.Length} {selectedRequest.ObjectType} items");
return await ((IReportAbleObject)biz).GetReportData(selectedRequest.SelectedRowIds);
} }

View File

@@ -1,5 +1,9 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using AyaNova.Biz; using AyaNova.Biz;
using System.Collections.Generic;
using AyaNova.DataList;
using Newtonsoft.Json;
using EnumsNET;
namespace AyaNova.Models 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
@@ -7,50 +11,24 @@ namespace AyaNova.Models
//be used to rehydrate a list of id's //be used to rehydrate a list of id's
public class DataListSelectedProcessingOptions : DataListProcessingBase public class DataListSelectedProcessingOptions : DataListProcessingBase
{ {
public AyaType ObjectType { get; set; } //public AyaType ObjectType { get; set; }
public long[] SelectedRowIds { get; set; } // public long[] SelectedRowIds { get; set; }
// public string DataListKey { 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 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 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
internal DataListSelectedProcessingOptions(
public bool IsEmpty DataListSelectedRequest request,
IDataListProcessing dataList,
DataListSavedColumnView savedView,
DataListSavedFilter savedFilter,
long userId,
AuthorizationRoles userRoles)
{ {
get //set some values from request
{
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;
base.ClientCriteria = request.ClientCriteria; base.ClientCriteria = request.ClientCriteria;
base.DataListKey = request.DataListKey; base.DataListKey = request.DataListKey;
//SET COLUMNS
Columns = JsonConvert.DeserializeObject<List<string>>(savedView.Columns);
//SET SORTBY //SET SORTBY
base.SortBy = JsonConvert.DeserializeObject<Dictionary<string, string>>(savedView.Sort); base.SortBy = JsonConvert.DeserializeObject<Dictionary<string, string>>(savedView.Sort);
@@ -69,4 +47,41 @@ namespace AyaNova.Models
base.Filter.Add(dfo); base.Filter.Add(dfo);
} }
*/
public static async Task<long[]> 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);
}
}
}