diff --git a/server/AyaNova/Controllers/ReportController.cs b/server/AyaNova/Controllers/ReportController.cs index 4919ce01..c30ae8b7 100644 --- a/server/AyaNova/Controllers/ReportController.cs +++ b/server/AyaNova/Controllers/ReportController.cs @@ -162,6 +162,36 @@ namespace AyaNova.Api.Controllers //====================================================================================================== + public class ObjectReportDataParameter + { + public AyaType ObjectType { get; set; } + public long[] ObjectIdArray { get; set; } + } + + /// + /// Get data from id list in format used by report designer + /// + /// report id and object id values for object type specified in report template + /// From route path + /// + [HttpPost("object-report-data")] + public async Task GetReportData([FromBody] ObjectReportDataParameter reportDataParam, ApiVersion apiVersion) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + ReportBiz biz = ReportBiz.GetBiz(ct, HttpContext); + + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + + var reportData = await biz.GetReportData(reportDataParam.ObjectType, reportDataParam.ObjectIdArray); + if (reportData == null) + return BadRequest(new ApiErrorResponse(biz.Errors)); + else + return Ok(ApiOkResponse.Response(reportData)); + } + + /// /// Render Report /// @@ -174,7 +204,7 @@ namespace AyaNova.Api.Controllers if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); ReportBiz biz = ReportBiz.GetBiz(ct, HttpContext); - if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) + if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); @@ -182,7 +212,7 @@ namespace AyaNova.Api.Controllers var httpConnectionFeature = HttpContext.Features.Get(); var API_URL = $"http://127.0.0.1:{httpConnectionFeature.LocalPort}/api/v8/"; - var result = await biz.RenderReport(reportParam.ReportId, reportParam.objectIdArray, API_URL); + var result = await biz.RenderReport(reportParam.ReportId, reportParam.ObjectIdArray, API_URL); if (result == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else @@ -193,7 +223,7 @@ namespace AyaNova.Api.Controllers public class RenderReportParameter { public long ReportId { get; set; } - public long[] objectIdArray { get; set; } + public long[] ObjectIdArray { get; set; } } diff --git a/server/AyaNova/biz/BizRoles.cs b/server/AyaNova/biz/BizRoles.cs index f820bd6a..fc00e1eb 100644 --- a/server/AyaNova/biz/BizRoles.cs +++ b/server/AyaNova/biz/BizRoles.cs @@ -550,7 +550,7 @@ namespace AyaNova.Biz roles.Add(AyaType.Report, new BizRoleSet() { Change = AuthorizationRoles.BizAdminFull | AuthorizationRoles.BizAdminLimited, - ReadFullRecord = AuthorizationRoles.BizAdminLimited | AuthorizationRoles.BizAdminLimited, + ReadFullRecord = AuthorizationRoles.All, Select = AuthorizationRoles.All }); diff --git a/server/AyaNova/biz/ReportBiz.cs b/server/AyaNova/biz/ReportBiz.cs index e104d7b1..68ca6618 100644 --- a/server/AyaNova/biz/ReportBiz.cs +++ b/server/AyaNova/biz/ReportBiz.cs @@ -225,6 +225,29 @@ namespace AyaNova.Biz } + + //////////////////////////////////////////////////////////////////////////////////////////////// + //REPORT DATA + //Data fetched to return to report designer for Client report design usage + + public async Task GetReportData(AyaType objectType, long[] objectidarray) + { + var log = AyaNova.Util.ApplicationLogging.CreateLogger("ReportBiz::GetReportData"); + AuthorizationRoles effectiveRoles = CurrentUserRoles; + if (!AyaNova.Api.ControllerHelpers.Authorized.HasReadFullRole(effectiveRoles, objectType)) + { + AddError(ApiErrorCode.NOT_AUTHORIZED, null, $"User not authorized for {objectType} type object"); + return null; + } + //Get data + log.LogDebug($"Instantiating biz object handler for {objectType}"); + var biz = BizObjectFactory.GetBizObject(objectType, ct); + log.LogDebug($"Fetching data for {objectidarray.Length} {objectType} items"); + return await ((IReportAbleObject)biz).GetReportData(objectidarray); + } + + + //////////////////////////////////////////////////////////////////////////////////////////////// //RENDER // @@ -270,7 +293,7 @@ namespace AyaNova.Biz log.LogDebug($"Instantiating biz object handler for {report.ObjectType}"); var biz = BizObjectFactory.GetBizObject(report.ObjectType, ct); log.LogDebug($"Fetching data for {objectidarray.Length} {report.ObjectType} items"); - var data = ((IReportAbleObject)biz).GetReportData(objectidarray).ToString(); + var data = (await ((IReportAbleObject)biz).GetReportData(objectidarray)).ToString(); //initialization log.LogDebug("Initializing report system");