diff --git a/server/AyaNova/Controllers/ReportController.cs b/server/AyaNova/Controllers/ReportController.cs index c30ae8b7..e4dac2b6 100644 --- a/server/AyaNova/Controllers/ReportController.cs +++ b/server/AyaNova/Controllers/ReportController.cs @@ -158,7 +158,25 @@ namespace AyaNova.Api.Controllers - + /// + /// Get Report list for object + /// + /// Type of object + /// Name / id report list of allowed reports for role of requester + [HttpGet("list/{ayType}")] + public async Task GetReportList([FromRoute] AyaType ayType) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + ReportBiz biz = ReportBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + var o = await biz.GetReportListAsync(ayType); + if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + return Ok(ApiOkResponse.Response(o)); + } //====================================================================================================== diff --git a/server/AyaNova/biz/ReportBiz.cs b/server/AyaNova/biz/ReportBiz.cs index 68ca6618..11d66d28 100644 --- a/server/AyaNova/biz/ReportBiz.cs +++ b/server/AyaNova/biz/ReportBiz.cs @@ -1,11 +1,13 @@ using System.Threading.Tasks; using System.Linq; using System.IO; +using System.Collections.Generic; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using AyaNova.Util; using AyaNova.Api.ControllerHelpers; using AyaNova.Models; +using EnumsNET; using PuppeteerSharp; namespace AyaNova.Biz @@ -160,6 +162,25 @@ namespace AyaNova.Biz } } + + //////////////////////////////////////////////////////////////////////////////////////////////// + //GET LIST + // + internal async Task> GetReportListAsync(AyaType ayType) + { + var rpts = await ct.Report.AsNoTracking().Where(z=>z.ObjectType==ayType && z.Active==true).Select(z=> new {id=z.Id,name=z.Name,roles=z.Roles}).ToListAsync(); + var ret=new List(); + foreach(var item in rpts){ + if(CurrentUserRoles.HasAnyFlags(item.roles)){ + ret.Add(new NameIdItem(){Name=item.name,Id=item.id}); + } + } + + //Sort by name + return ret.OrderBy(z=>z.Name).ToList(); + } + + //////////////////////////////////////////////////////////////////////////////////////////////// //SEARCH //