This commit is contained in:
2021-01-27 23:32:05 +00:00
parent d44361fc19
commit 34a4c31249
17 changed files with 106 additions and 101 deletions

View File

@@ -1,5 +1,7 @@
LIST / GRAPH FILTERING SORTING AND COLUMN RETURNED LIST / GRAPH FILTERING SORTING AND COLUMN RETURNED
##### DEPRECATED ALL LISTVIEW STUFF FOR NEW SPLIT METHOD SOME OF BELOW IS OUTDATED WHERE IT DEALS WITH THE "LISTVIEW"
DATALIST DATALIST
A dataList is a raw source of data for returning to client A dataList is a raw source of data for returning to client
All below is based on a datalist which is a predefined list of fields, rights and some query info for joins etc All below is based on a datalist which is a predefined list of fields, rights and some query info for joins etc
@@ -27,7 +29,7 @@ Users can select a datalistview for a picklist DataList which will in turn affec
Users will get the default hard coded DataListView built into the DataList that is specified for that picklist unless it's changed to an alternative datalistview Users will get the default hard coded DataListView built into the DataList that is specified for that picklist unless it's changed to an alternative datalistview
There is a default PickList format and a default DataTable format pre-defined and hard coded at the server with each dataList definition object There is a default PickList format and a default DataTable format pre-defined and hard coded at the server with each dataList definition object
If the client isn't using a particular dataListView it MUST send the ListView json as empty string or omit it entirely. If the client isn't using a particular dataListView it MUST send the Lis tView json as empty string or omit it entirely.
This will instruct the server to use the pre-defined format instead This will instruct the server to use the pre-defined format instead
JSON DataListView format: JSON DataListView format:

View File

@@ -21,13 +21,13 @@ namespace AyaNova.Api.Controllers
/// </summary> /// </summary>
[ApiController] [ApiController]
[ApiVersion("8.0")] [ApiVersion("8.0")]
[Route("api/v{version:apiVersion}/data-list-view")] [Route("api/v{version:apiVersion}/data-list-filter")]
[Produces("application/json")] [Produces("application/json")]
[Authorize] [Authorize]
public class DataListViewController : ControllerBase public class DataListSavedFilterController : ControllerBase
{ {
private readonly AyContext ct; private readonly AyContext ct;
private readonly ILogger<DataListViewController> log; private readonly ILogger<DataListSavedFilterController> log;
private readonly ApiServerState serverState; private readonly ApiServerState serverState;
@@ -37,7 +37,7 @@ namespace AyaNova.Api.Controllers
/// <param name="dbcontext"></param> /// <param name="dbcontext"></param>
/// <param name="logger"></param> /// <param name="logger"></param>
/// <param name="apiServerState"></param> /// <param name="apiServerState"></param>
public DataListViewController(AyContext dbcontext, ILogger<DataListViewController> logger, ApiServerState apiServerState) public DataListSavedFilterController(AyContext dbcontext, ILogger<DataListSavedFilterController> logger, ApiServerState apiServerState)
{ {
ct = dbcontext; ct = dbcontext;
log = logger; log = logger;
@@ -46,18 +46,18 @@ namespace AyaNova.Api.Controllers
/// <summary> /// <summary>
/// Get full DataListView object /// Get full DataListSavedFilter object
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns>A single DataListView</returns> /// <returns>A single DataListSavedFilter</returns>
[HttpGet("{id}")] [HttpGet("{id}")]
public async Task<IActionResult> GetDataListView([FromRoute] long id) public async Task<IActionResult> GetDataListSavedFilter([FromRoute] long id)
{ {
if (!serverState.IsOpen) if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
//Instantiate the business object handler //Instantiate the business object handler
DataListViewBiz biz = DataListViewBiz.GetBiz(ct, HttpContext); DataListSavedFilterBiz biz = DataListSavedFilterBiz.GetBiz(ct, HttpContext);
if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType))
return StatusCode(403, new ApiNotAuthorizedResponse()); return StatusCode(403, new ApiNotAuthorizedResponse());
@@ -75,11 +75,11 @@ namespace AyaNova.Api.Controllers
/// <summary> /// <summary>
/// Get DataListView list /// Get DataListSavedFilter list
/// </summary> /// </summary>
/// <returns>List of public or owned data list views listKey provided</returns> /// <returns>List of public or owned data list views listKey provided</returns>
[HttpGet("viewlist", Name = nameof(DataListViewList))] [HttpGet("list", Name = nameof(DataListSavedFilterList))]
public async Task<IActionResult> DataListViewList([FromQuery] string ListKey) public async Task<IActionResult> DataListSavedFilterList([FromQuery] string ListKey)
{ {
if (!serverState.IsOpen) if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
@@ -88,7 +88,7 @@ namespace AyaNova.Api.Controllers
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
//Instantiate the business object handler //Instantiate the business object handler
DataListViewBiz biz = DataListViewBiz.GetBiz(ct, HttpContext); DataListSavedFilterBiz biz = DataListSavedFilterBiz.GetBiz(ct, HttpContext);
var l = await biz.GetViewListAsync(ListKey); var l = await biz.GetViewListAsync(ListKey);
return Ok(ApiOkResponse.Response(l)); return Ok(ApiOkResponse.Response(l));
@@ -97,13 +97,13 @@ namespace AyaNova.Api.Controllers
/// <summary> /// <summary>
/// Put (update) DataListView /// Put (update) DataListSavedFilter
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="inObj"></param> /// <param name="inObj"></param>
/// <returns></returns> /// <returns></returns>
[HttpPut("{id}")] [HttpPut("{id}")]
public async Task<IActionResult> PutDataListView([FromRoute] long id, [FromBody] DataListView inObj) public async Task<IActionResult> PutDataListSavedFilter([FromRoute] long id, [FromBody] DataListSavedFilter inObj)
{ {
if (!serverState.IsOpen) if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
@@ -112,7 +112,7 @@ namespace AyaNova.Api.Controllers
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
//Instantiate the business object handler //Instantiate the business object handler
DataListViewBiz biz = DataListViewBiz.GetBiz(ct, HttpContext); DataListSavedFilterBiz biz = DataListSavedFilterBiz.GetBiz(ct, HttpContext);
var o = await biz.GetAsync(id, false); var o = await biz.GetAsync(id, false);
if (o == null) if (o == null)
@@ -138,19 +138,19 @@ namespace AyaNova.Api.Controllers
/// <summary> /// <summary>
/// Create DataListView /// Create DataListSavedFilter
/// </summary> /// </summary>
/// <param name="inObj"></param> /// <param name="inObj"></param>
/// <param name="apiVersion">From route path</param> /// <param name="apiVersion">From route path</param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<IActionResult> PostDataListView([FromBody] DataListView inObj, ApiVersion apiVersion) public async Task<IActionResult> PostDataListSavedFilter([FromBody] DataListSavedFilter inObj, ApiVersion apiVersion)
{ {
if (!serverState.IsOpen) if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
//Instantiate the business object handler //Instantiate the business object handler
DataListViewBiz biz = DataListViewBiz.GetBiz(ct, HttpContext); DataListSavedFilterBiz biz = DataListSavedFilterBiz.GetBiz(ct, HttpContext);
//check roles //check roles
if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType))
@@ -160,16 +160,16 @@ namespace AyaNova.Api.Controllers
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
//Create and validate //Create and validate
DataListView o = await biz.CreateAsync(inObj); DataListSavedFilter o = await biz.CreateAsync(inObj);
if (o == null) if (o == null)
return BadRequest(new ApiErrorResponse(biz.Errors)); return BadRequest(new ApiErrorResponse(biz.Errors));
else else
return CreatedAtAction(nameof(DataListViewController.GetDataListView), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); return CreatedAtAction(nameof(DataListSavedFilterController.GetDataListSavedFilter), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
} }
/// <summary> /// <summary>
/// Duplicate DataListView /// Duplicate DataListSavedFilter
/// </summary> /// </summary>
/// <param name="id">Create a duplicate of this items id</param> /// <param name="id">Create a duplicate of this items id</param>
/// <param name="apiVersion">From route path</param> /// <param name="apiVersion">From route path</param>
@@ -181,7 +181,7 @@ namespace AyaNova.Api.Controllers
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
//Instantiate the business object handler //Instantiate the business object handler
DataListViewBiz biz = DataListViewBiz.GetBiz(ct, HttpContext); DataListSavedFilterBiz biz = DataListSavedFilterBiz.GetBiz(ct, HttpContext);
//If a user has change roles //If a user has change roles
if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType))
@@ -195,21 +195,21 @@ namespace AyaNova.Api.Controllers
return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
//Create and validate //Create and validate
DataListView o = await biz.DuplicateAsync(oSrc); DataListSavedFilter o = await biz.DuplicateAsync(oSrc);
if (o == null) if (o == null)
return BadRequest(new ApiErrorResponse(biz.Errors)); return BadRequest(new ApiErrorResponse(biz.Errors));
else else
return CreatedAtAction(nameof(DataListViewController.GetDataListView), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); return CreatedAtAction(nameof(DataListSavedFilterController.GetDataListSavedFilter), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
} }
/// <summary> /// <summary>
/// Delete DataListView /// Delete DataListSavedFilter
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns>Ok</returns> /// <returns>Ok</returns>
[HttpDelete("{id}")] [HttpDelete("{id}")]
public async Task<IActionResult> DeleteDataListView([FromRoute] long id) public async Task<IActionResult> DeleteDataListSavedFilter([FromRoute] long id)
{ {
if (!serverState.IsOpen) if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
@@ -218,7 +218,7 @@ namespace AyaNova.Api.Controllers
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
//Instantiate the business object handler //Instantiate the business object handler
DataListViewBiz biz = DataListViewBiz.GetBiz(ct, HttpContext); DataListSavedFilterBiz biz = DataListSavedFilterBiz.GetBiz(ct, HttpContext);
var o = await biz.GetAsync(id, false); var o = await biz.GetAsync(id, false);
if (o == null) if (o == null)
@@ -237,16 +237,16 @@ namespace AyaNova.Api.Controllers
/// Get default ListView for DataList /// Get default ListView for DataList
/// </summary> /// </summary>
/// <param name="dataListKey">Key of an existing DataList</param> /// <param name="dataListKey">Key of an existing DataList</param>
/// <returns>A single DataListView</returns> /// <returns>A single DataListSavedFilter</returns>
[HttpGet("default/{dataListKey}")] [HttpGet("default/{dataListKey}")]
public ActionResult GetDefaultDataListView([FromRoute] string dataListKey) public ActionResult GetDefaultDataListSavedFilter([FromRoute] string dataListKey)
{ {
throw new System.NotSupportedException("NEEDS REPLACEMENT WITH NEW SYSTEM"); throw new System.NotSupportedException("NEEDS REPLACEMENT WITH NEW SYSTEM");
// if (!serverState.IsOpen) // if (!serverState.IsOpen)
// return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); // return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
// //Instantiate the business object handler // //Instantiate the business object handler
// DataListViewBiz biz = DataListViewBiz.GetBiz(ct, HttpContext); // DataListSavedFilterBiz biz = DataListSavedFilterBiz.GetBiz(ct, HttpContext);
// if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) // if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType))
// return StatusCode(403, new ApiNotAuthorizedResponse()); // return StatusCode(403, new ApiNotAuthorizedResponse());

View File

@@ -88,7 +88,7 @@ namespace AyaNova.DataList
//Developers little helper //Developers little helper
if (o == null) if (o == null)
{ {
throw new System.ArgumentNullException($"DEV ERROR in AyaDataList::GenerateListColumnsJSONFromListView - field {s} specified in ListView was NOT found in ObjectFields list"); throw new System.ArgumentNullException($"DEV ERROR in AyaDataList::GenerateReturnListColumns - field {s} specified in columns was NOT found in ObjectFields list");
} }
#endif #endif

View File

@@ -12,8 +12,8 @@ namespace AyaNova.DataList
internal static class DataListSqlSelectBuilder internal static class DataListSqlSelectBuilder
{ {
//Build the SELECT portion of a list query based on the ListView fields //Build the SELECT portion of a list query based on the columns
internal static SqlSelectBuilderResult Build(List<AyaDataListFieldDefinition> objectFieldsList, List<string> listViewFieldList) internal static SqlSelectBuilderResult Build(List<AyaDataListFieldDefinition> objectFieldsList, List<string> columns)
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.Append("SELECT "); sb.Append("SELECT ");
@@ -26,14 +26,14 @@ namespace AyaNova.DataList
int nOrdinal = 0; int nOrdinal = 0;
var firstColumnAdded = false; var firstColumnAdded = false;
foreach (string ColumnName in listViewFieldList) foreach (string ColumnName in columns)
{ {
AyaDataListFieldDefinition o = objectFieldsList.FirstOrDefault(z => z.FieldKey == ColumnName); AyaDataListFieldDefinition o = objectFieldsList.FirstOrDefault(z => z.FieldKey == ColumnName);
#if (DEBUG) #if (DEBUG)
//Developers little helper //Developers little helper
if (o == null) if (o == null)
{ {
throw new System.ArgumentNullException($"## DEV ERROR in DataListSqlSelectBuilder.cs:Build() field {ColumnName} specified in datalist view was NOT found in the data list's ObjectFields list, a defined fieldkey name differs from the ListView field key name"); throw new System.ArgumentNullException($"## DEV ERROR in DataListSqlSelectBuilder.cs:Build() field {ColumnName} specified in columns was NOT found in the data list's ObjectFields list, a defined fieldkey name differs from the columns key name");
} }
#endif #endif
if (o != null) if (o != null)

View File

@@ -45,7 +45,7 @@ namespace AyaNova.Biz
[CoreBizObject] [CoreBizObject]
LoanUnit = 16, LoanUnit = 16,
FileAttachment = 17, FileAttachment = 17,
DataListView = 18, DataListSavedFilter = 18,
FormCustom = 19, FormCustom = 19,
[CoreBizObject] [CoreBizObject]
Part = 20, Part = 20,

View File

@@ -26,8 +26,8 @@ namespace AyaNova.Biz
return true; return true;
case AyaType.FileAttachment: case AyaType.FileAttachment:
return await ct.FileAttachment.AnyAsync(z => z.Id == id); return await ct.FileAttachment.AnyAsync(z => z.Id == id);
case AyaType.DataListView: case AyaType.DataListSavedFilter:
return await ct.DataListView.AnyAsync(z => z.Id == id); return await ct.DataListSavedFilter.AnyAsync(z => z.Id == id);
case AyaType.FormCustom: case AyaType.FormCustom:
return await ct.FormCustom.AnyAsync(z => z.Id == id); return await ct.FormCustom.AnyAsync(z => z.Id == id);
case AyaType.User: case AyaType.User:

View File

@@ -24,8 +24,8 @@ namespace AyaNova.Biz
return new TrialBiz(ct, userId, roles); return new TrialBiz(ct, userId, roles);
case AyaType.Translation: case AyaType.Translation:
return new TranslationBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new TranslationBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.DataListView: case AyaType.DataListSavedFilter:
return new DataListViewBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new DataListSavedFilterBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.FormCustom: case AyaType.FormCustom:
return new FormCustomBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new FormCustomBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.Widget: case AyaType.Widget:

View File

@@ -694,7 +694,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
//DATALISTFILTER //DATALISTFILTER
// //
roles.Add(AyaType.DataListView, new BizRoleSet() roles.Add(AyaType.DataListSavedFilter, new BizRoleSet()
{ {
Change = AuthorizationRoles.BizAdminFull, Change = AuthorizationRoles.BizAdminFull,
ReadFullRecord = AuthorizationRoles.All ReadFullRecord = AuthorizationRoles.All

View File

@@ -13,24 +13,24 @@ namespace AyaNova.Biz
{ {
internal class DataListViewBiz : BizObject internal class DataListSavedFilterBiz : BizObject
{ {
internal DataListViewBiz(AyContext dbcontext, long currentUserId, long userTranslationId, AuthorizationRoles UserRoles) internal DataListSavedFilterBiz(AyContext dbcontext, long currentUserId, long userTranslationId, AuthorizationRoles UserRoles)
{ {
ct = dbcontext; ct = dbcontext;
UserId = currentUserId; UserId = currentUserId;
UserTranslationId = userTranslationId; UserTranslationId = userTranslationId;
CurrentUserRoles = UserRoles; CurrentUserRoles = UserRoles;
BizType = AyaType.DataListView; BizType = AyaType.DataListSavedFilter;
} }
internal static DataListViewBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null) internal static DataListSavedFilterBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null)
{ {
if (httpContext != null) if (httpContext != null)
return new DataListViewBiz(ct, UserIdFromContext.Id(httpContext.Items), UserTranslationIdFromContext.Id(httpContext.Items), UserRolesFromContext.Roles(httpContext.Items)); return new DataListSavedFilterBiz(ct, UserIdFromContext.Id(httpContext.Items), UserTranslationIdFromContext.Id(httpContext.Items), UserRolesFromContext.Roles(httpContext.Items));
else else
return new DataListViewBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, AuthorizationRoles.BizAdminFull); return new DataListSavedFilterBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, AuthorizationRoles.BizAdminFull);
} }
@@ -39,14 +39,14 @@ namespace AyaNova.Biz
//EXISTS //EXISTS
internal async Task<bool> ExistsAsync(long id) internal async Task<bool> ExistsAsync(long id)
{ {
return await ct.DataListView.AnyAsync(z => z.Id == id); return await ct.DataListSavedFilter.AnyAsync(z => z.Id == id);
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//CREATE //CREATE
internal async Task<DataListView> CreateAsync(DataListView inObj) internal async Task<DataListSavedFilter> CreateAsync(DataListSavedFilter inObj)
{ {
await ValidateAsync(inObj, true); await ValidateAsync(inObj, true);
if (HasErrors) if (HasErrors)
@@ -54,11 +54,11 @@ namespace AyaNova.Biz
else else
{ {
//do stuff with datafilter //do stuff with datafilter
DataListView outObj = inObj; DataListSavedFilter outObj = inObj;
outObj.UserId = UserId; outObj.UserId = UserId;
await ct.DataListView.AddAsync(outObj); await ct.DataListSavedFilter.AddAsync(outObj);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
//Handle child and associated items: //Handle child and associated items:
@@ -80,10 +80,10 @@ namespace AyaNova.Biz
//DUPLICATE //DUPLICATE
// //
internal async Task<DataListView> DuplicateAsync(DataListView dbObject) internal async Task<DataListSavedFilter> DuplicateAsync(DataListSavedFilter dbObject)
{ {
DataListView outObj = new DataListView(); DataListSavedFilter outObj = new DataListSavedFilter();
CopyObject.Copy(dbObject, outObj); CopyObject.Copy(dbObject, outObj);
//generate unique name //generate unique name
string newUniqueName = string.Empty; string newUniqueName = string.Empty;
@@ -92,7 +92,7 @@ namespace AyaNova.Biz
do do
{ {
newUniqueName = Util.StringUtil.UniqueNameBuilder(dbObject.Name, l++, 255); newUniqueName = Util.StringUtil.UniqueNameBuilder(dbObject.Name, l++, 255);
NotUnique = await ct.DataListView.AnyAsync(z => z.Name == newUniqueName); NotUnique = await ct.DataListSavedFilter.AnyAsync(z => z.Name == newUniqueName);
} while (NotUnique); } while (NotUnique);
outObj.Name = newUniqueName; outObj.Name = newUniqueName;
outObj.Id = 0; outObj.Id = 0;
@@ -100,7 +100,7 @@ namespace AyaNova.Biz
await ct.DataListView.AddAsync(outObj); await ct.DataListSavedFilter.AddAsync(outObj);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
//Handle child and associated items: //Handle child and associated items:
@@ -114,10 +114,10 @@ namespace AyaNova.Biz
/// GET /// GET
//Get one //Get one
internal async Task<DataListView> GetAsync(long fetchId, bool logTheGetEvent = true) internal async Task<DataListSavedFilter> GetAsync(long fetchId, bool logTheGetEvent = true)
{ {
//This is simple so nothing more here, but often will be copying to a different output object or some other ops //This is simple so nothing more here, but often will be copying to a different output object or some other ops
var ret = await ct.DataListView.SingleOrDefaultAsync(z => z.Id == fetchId && (z.Public == true || z.UserId == UserId)); var ret = await ct.DataListSavedFilter.SingleOrDefaultAsync(z => z.Id == fetchId && (z.Public == true || z.UserId == UserId));
if (logTheGetEvent && ret != null) if (logTheGetEvent && ret != null)
{ {
//Log //Log
@@ -135,7 +135,7 @@ namespace AyaNova.Biz
List<NameIdItem> items = new List<NameIdItem>(); List<NameIdItem> items = new List<NameIdItem>();
if (!string.IsNullOrWhiteSpace(listKey)) if (!string.IsNullOrWhiteSpace(listKey))
{ {
items = await ct.DataListView items = await ct.DataListSavedFilter
.AsNoTracking() .AsNoTracking()
.Where(z => z.ListKey == listKey && (z.Public == true || z.UserId == UserId)) .Where(z => z.ListKey == listKey && (z.Public == true || z.UserId == UserId))
.OrderBy(z => z.Name) .OrderBy(z => z.Name)
@@ -157,7 +157,7 @@ namespace AyaNova.Biz
// //
//put //put
internal async Task<bool> PutAsync(DataListView dbObject, DataListView inObj) internal async Task<bool> PutAsync(DataListSavedFilter dbObject, DataListSavedFilter inObj)
{ {
//preserve the owner ID if none was specified //preserve the owner ID if none was specified
if (inObj.UserId == 0) if (inObj.UserId == 0)
@@ -186,7 +186,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//DELETE //DELETE
// //
internal async Task<bool> DeleteAsync(DataListView dbObject) internal async Task<bool> DeleteAsync(DataListSavedFilter dbObject)
{ {
//Determine if the object can be deleted, do the deletion tentatively //Determine if the object can be deleted, do the deletion tentatively
//Probably also in here deal with tags and associated search text etc //Probably also in here deal with tags and associated search text etc
@@ -196,7 +196,7 @@ namespace AyaNova.Biz
if (HasErrors) if (HasErrors)
return false; return false;
ct.DataListView.Remove(dbObject); ct.DataListSavedFilter.Remove(dbObject);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
//Delete sibling objects //Delete sibling objects
@@ -217,7 +217,7 @@ namespace AyaNova.Biz
// //
//Can save or update? //Can save or update?
private async Task ValidateAsync(DataListView inObj, bool isNew) private async Task ValidateAsync(DataListSavedFilter inObj, bool isNew)
{ {
//UserId required //UserId required
@@ -238,7 +238,7 @@ namespace AyaNova.Biz
if (!PropertyHasErrors("Name")) if (!PropertyHasErrors("Name"))
{ {
//Use Any command is efficient way to check existance, it doesn't return the record, just a true or false //Use Any command is efficient way to check existance, it doesn't return the record, just a true or false
if (await ct.DataListView.AnyAsync(z => z.Name == inObj.Name && z.Id != inObj.Id)) if (await ct.DataListSavedFilter.AnyAsync(z => z.Name == inObj.Name && z.Id != inObj.Id))
{ {
AddError(ApiErrorCode.VALIDATION_NOT_UNIQUE, "Name"); AddError(ApiErrorCode.VALIDATION_NOT_UNIQUE, "Name");
} }

View File

@@ -22,7 +22,7 @@ namespace AyaNova.Models
public virtual DbSet<OpsJobLog> OpsJobLog { get; set; } public virtual DbSet<OpsJobLog> OpsJobLog { get; set; }
public virtual DbSet<Translation> Translation { get; set; } public virtual DbSet<Translation> Translation { get; set; }
public virtual DbSet<TranslationItem> TranslationItem { get; set; } public virtual DbSet<TranslationItem> TranslationItem { get; set; }
public virtual DbSet<DataListView> DataListView { get; set; } public virtual DbSet<DataListSavedFilter> DataListSavedFilter { get; set; }
public virtual DbSet<Tag> Tag { get; set; } public virtual DbSet<Tag> Tag { get; set; }
public virtual DbSet<FormCustom> FormCustom { get; set; } public virtual DbSet<FormCustom> FormCustom { get; set; }
public virtual DbSet<PickListTemplate> PickListTemplate { get; set; } public virtual DbSet<PickListTemplate> PickListTemplate { get; set; }

View File

@@ -3,8 +3,9 @@ using System.ComponentModel.DataAnnotations;
namespace AyaNova.Models namespace AyaNova.Models
{ {
//TODO: Need to split this into a personal column order set and a personal filter collection //this is a hiearchical object so saving as a JSON fragment still best option
public class DataListView
public class DataListSavedFilter
{ {
public long Id { get; set; } public long Id { get; set; }
public uint Concurrency { get; set; } public uint Concurrency { get; set; }
@@ -17,7 +18,8 @@ namespace AyaNova.Models
public bool Public { get; set; } public bool Public { get; set; }
[Required, MaxLength(255)] [Required, MaxLength(255)]
public string ListKey { get; set; }//max 255 characters ascii set public string ListKey { get; set; }//max 255 characters ascii set
public string ListView { get; set; }//JSON ListView object public string Filter { get; set; }//JSON filter object representing DataListFilterOption
//filter:[{column:"PartPartNumber",any:true/false,items:[{op: "=",value: "400735"}]}]
} }

View File

@@ -1753,7 +1753,7 @@
"ReviewCustom15": "Angepasstes Feld 15", "ReviewCustom15": "Angepasstes Feld 15",
"ReviewCustom16": "Angepasstes Feld 16", "ReviewCustom16": "Angepasstes Feld 16",
"UserSettings": "Benutzereinstellungen", "UserSettings": "Benutzereinstellungen",
"DataListView": "Datenlistenansicht", "DataListSavedFilter": "Listenfilter",
"Include": "Umfassen", "Include": "Umfassen",
"Sort": "Sortieren", "Sort": "Sortieren",
"Filter": "Filter", "Filter": "Filter",

View File

@@ -1753,7 +1753,7 @@
"ReviewCustom15": "Custom15", "ReviewCustom15": "Custom15",
"ReviewCustom16": "Custom16", "ReviewCustom16": "Custom16",
"UserSettings": "User settings", "UserSettings": "User settings",
"DataListView": "List view", "DataListSavedFilter": "List filter",
"Include": "Include", "Include": "Include",
"Sort": "Sort", "Sort": "Sort",
"Filter": "Filter", "Filter": "Filter",

View File

@@ -1753,7 +1753,7 @@
"ReviewCustom15": "Campo personalizado 15", "ReviewCustom15": "Campo personalizado 15",
"ReviewCustom16": "Campo personalizado 16", "ReviewCustom16": "Campo personalizado 16",
"UserSettings": "Configuración de usuario", "UserSettings": "Configuración de usuario",
"DataListView": "Vista de lista de datos", "DataListSavedFilter": "Filtro de lista",
"Include": "Incluir", "Include": "Incluir",
"Sort": "Ordenar", "Sort": "Ordenar",
"Filter": "Filtro", "Filter": "Filtro",

View File

@@ -1753,7 +1753,7 @@
"ReviewCustom15": "Champ personnalisé 15", "ReviewCustom15": "Champ personnalisé 15",
"ReviewCustom16": "Champ personnalisé 16", "ReviewCustom16": "Champ personnalisé 16",
"UserSettings": "Paramètres utilisateur", "UserSettings": "Paramètres utilisateur",
"DataListView": "Affichage de la liste des données", "DataListSavedFilter": "Filtre de liste",
"Include": "Inclure", "Include": "Inclure",
"Sort": "Trier", "Sort": "Trier",
"Filter": "Filtre", "Filter": "Filtre",

View File

@@ -346,7 +346,7 @@ BEGIN
when 15 then aytable = 'aheadoffice'; when 15 then aytable = 'aheadoffice';
when 16 then aytable = 'aloanunit'; when 16 then aytable = 'aloanunit';
when 17 then aytable = 'afileattachment'; aynamecolumn ='displayfilename'; when 17 then aytable = 'afileattachment'; aynamecolumn ='displayfilename';
when 18 then aytable = 'adatalistview'; when 18 then aytable = 'adatalistsavedfilter';
when 19 then aytable = 'aformcustom'; aynamecolumn = 'formkey'; when 19 then aytable = 'aformcustom'; aynamecolumn = 'formkey';
when 20 then aytable = 'apart'; aynamecolumn ='partnumber'; when 20 then aytable = 'apart'; aynamecolumn ='partnumber';
when 21 then aytable = 'apm'; aynamecolumn ='serial'; when 21 then aytable = 'apm'; aynamecolumn ='serial';
@@ -509,8 +509,8 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
{ {
LogUpdateMessage(log); LogUpdateMessage(log);
await ExecQueryAsync("CREATE TABLE adatalistview (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, userid BIGINT NOT NULL, name TEXT NOT NULL UNIQUE, public BOOL NOT NULL," + await ExecQueryAsync("CREATE TABLE adatalistsavedfilter (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, userid BIGINT NOT NULL, name TEXT NOT NULL UNIQUE, public BOOL NOT NULL," +
"listkey VARCHAR(255) NOT NULL, listview TEXT)"); "listkey VARCHAR(255) NOT NULL, filter TEXT)");
await SetSchemaLevelAsync(++currentSchema); await SetSchemaLevelAsync(++currentSchema);
} }

View File

@@ -166,34 +166,35 @@ namespace AyaNova.Util
await FormCustomBiz.GetBiz(ct).CreateAsync(fc); await FormCustomBiz.GetBiz(ct).CreateAsync(fc);
} }
//Create a couple of DataListView's for development and testing //TODO: Add this back in or...fuck it?
{ // //Create a couple of DataListView's for development and testing
var dlv = new DataListView() // {
{ // var dlv = new DataListSavedFilter()
Name = "Name starts with generic", // {
UserId = 1, // Name = "Name starts with generic",
ListKey = "TestWidgetDataList", // UserId = 1,
Public = true, // ListKey = "TestWidgetDataList",
ListView = @"[{""fld"": ""widgetname"",""filter"": {""any"":false,""items"": [{""op"": ""%-"",""value"": ""Generic""}]}}]" // Public = true,
}; // ListView = @"[{""fld"": ""widgetname"",""filter"": {""any"":false,""items"": [{""op"": ""%-"",""value"": ""Generic""}]}}]"
// };
//Create and save to db // //Create and save to db
using (var ct = ServiceProviderProvider.DBContext) // using (var ct = ServiceProviderProvider.DBContext)
await DataListViewBiz.GetBiz(ct).CreateAsync(dlv); // await DataListSavedFilterBiz.GetBiz(ct).CreateAsync(dlv);
dlv = new DataListView() // dlv = new DataListSavedFilter()
{ // {
Name = "Awesome (lots of fields)", // Name = "Awesome (lots of fields)",
UserId = 1, // UserId = 1,
ListKey = "TestWidgetDataList", // ListKey = "TestWidgetDataList",
Public = true, // Public = true,
ListView = @"[{""fld"": ""widgetname"",""filter"": {""any"":false,""items"": [{""op"": ""%-"",""value"": ""Awesome""}]}},{""fld"":""widgetserial""},{""fld"":""widgetdollaramount""},{""fld"":""widgetusertype""},{""fld"":""widgetstartdate""},{""fld"":""widgetactive""},{""fld"":""username""},{""fld"":""widgettags""},{""fld"":""widgetcustom1""},{""fld"":""widgetcustom2""}]" // ListView = @"[{""fld"": ""widgetname"",""filter"": {""any"":false,""items"": [{""op"": ""%-"",""value"": ""Awesome""}]}},{""fld"":""widgetserial""},{""fld"":""widgetdollaramount""},{""fld"":""widgetusertype""},{""fld"":""widgetstartdate""},{""fld"":""widgetactive""},{""fld"":""username""},{""fld"":""widgettags""},{""fld"":""widgetcustom1""},{""fld"":""widgetcustom2""}]"
}; // };
//Create and save to db // //Create and save to db
using (var ct = ServiceProviderProvider.DBContext) // using (var ct = ServiceProviderProvider.DBContext)
await DataListViewBiz.GetBiz(ct).CreateAsync(dlv); // await DataListSavedFilterBiz.GetBiz(ct).CreateAsync(dlv);
} // }
//Seed special test data for integration testing //Seed special test data for integration testing
@@ -1608,7 +1609,7 @@ namespace AyaNova.Util
//Add inventory into multiple warehouses for testing //Add inventory into multiple warehouses for testing
for (int y = 0; y < 3; y++) for (int y = 0; y < 3; y++)
{ {
int WarehouseNumber=y+1; int WarehouseNumber = y + 1;
//add opening inventory //add opening inventory
partInventory = await PartInventoryBizNess.CreateAsync(new dtPartInventory() { PartId = NewObject.Id, PartWarehouseId = WarehouseNumber, Quantity = OpeningInventoryLevel, Description = "New part opening inventory" }); partInventory = await PartInventoryBizNess.CreateAsync(new dtPartInventory() { PartId = NewObject.Id, PartWarehouseId = WarehouseNumber, Quantity = OpeningInventoryLevel, Description = "New part opening inventory" });