This commit is contained in:
2021-01-30 19:45:23 +00:00
parent 1012f28c0a
commit a9a063c4cd
13 changed files with 44 additions and 44 deletions

2
.vscode/launch.json vendored
View File

@@ -53,7 +53,7 @@
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles",
"AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", "AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles",
"AYANOVA_SERVER_TEST_MODE": "false", "AYANOVA_SERVER_TEST_MODE": "true",
"AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small",
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7",
"AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\" "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\"

View File

@@ -19,10 +19,10 @@ namespace AyaNova.Api.Controllers
[Route("api/v{version:apiVersion}/data-list-column-view")] [Route("api/v{version:apiVersion}/data-list-column-view")]
[Produces("application/json")] [Produces("application/json")]
[Authorize] [Authorize]
public class DataListSavedColumnViewController : ControllerBase public class DataListColumnViewController : ControllerBase
{ {
private readonly AyContext ct; private readonly AyContext ct;
private readonly ILogger<DataListSavedColumnViewController> log; private readonly ILogger<DataListColumnViewController> log;
private readonly ApiServerState serverState; private readonly ApiServerState serverState;
@@ -32,7 +32,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 DataListSavedColumnViewController(AyContext dbcontext, ILogger<DataListSavedColumnViewController> logger, ApiServerState apiServerState) public DataListColumnViewController(AyContext dbcontext, ILogger<DataListColumnViewController> logger, ApiServerState apiServerState)
{ {
ct = dbcontext; ct = dbcontext;
log = logger; log = logger;
@@ -41,16 +41,16 @@ namespace AyaNova.Api.Controllers
/// <summary> /// <summary>
/// Get DataListSavedColumnView for current user /// Get DataListColumnView for current user
/// </summary> /// </summary>
/// <param name="listKey"></param> /// <param name="listKey"></param>
/// <returns>DataListSavedColumnView</returns> /// <returns>DataListColumnView</returns>
[HttpGet("{userId}/{listKey}")] [HttpGet("{userId}/{listKey}")]
public async Task<IActionResult> GetDataListSavedColumnView([FromRoute] string listKey) public async Task<IActionResult> GetDataListColumnView([FromRoute] 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));
DataListSavedColumnViewBiz biz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext); DataListColumnViewBiz biz = DataListColumnViewBiz.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());
if (!ModelState.IsValid) if (!ModelState.IsValid)
@@ -63,22 +63,22 @@ namespace AyaNova.Api.Controllers
/// <summary> /// <summary>
/// Replace DataListSavedColumnView /// Replace DataListColumnView
/// </summary> /// </summary>
/// <param name="newObject"></param> /// <param name="newObject"></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> ReplaceDataListSavedColumnView([FromBody] DataListSavedColumnView newObject, ApiVersion apiVersion) public async Task<IActionResult> ReplaceDataListColumnView([FromBody] DataListColumnView newObject, 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));
DataListSavedColumnViewBiz biz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext); DataListColumnViewBiz biz = DataListColumnViewBiz.GetBiz(ct, HttpContext);
if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType))
return StatusCode(403, new ApiNotAuthorizedResponse()); return StatusCode(403, new ApiNotAuthorizedResponse());
if (!ModelState.IsValid) if (!ModelState.IsValid)
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
DataListSavedColumnView o = await biz.CreateAsync(newObject); DataListColumnView o = await biz.CreateAsync(newObject);
if (o == null) if (o == null)
return BadRequest(new ApiErrorResponse(biz.Errors)); return BadRequest(new ApiErrorResponse(biz.Errors));
else else
@@ -87,18 +87,18 @@ namespace AyaNova.Api.Controllers
/// <summary> /// <summary>
/// Reset DataListSavedColumnView to factory defaults /// Reset DataListColumnView to factory defaults
/// </summary> /// </summary>
/// <param name="listKey"></param> /// <param name="listKey"></param>
/// <returns>NoContent</returns> /// <returns>NoContent</returns>
[HttpDelete("{id}")] [HttpDelete("{id}")]
public async Task<IActionResult> ResetDataListSavedColumnView([FromRoute] string listKey) public async Task<IActionResult> ResetDataListColumnView([FromRoute] 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));
if (!ModelState.IsValid) if (!ModelState.IsValid)
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
DataListSavedColumnViewBiz biz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext); DataListColumnViewBiz biz = DataListColumnViewBiz.GetBiz(ct, HttpContext);
var o = await biz.DeleteAsync(biz.UserId, listKey); var o = await biz.DeleteAsync(biz.UserId, listKey);
if (o == null) if (o == null)
return BadRequest(new ApiErrorResponse(biz.Errors)); return BadRequest(new ApiErrorResponse(biz.Errors));

View File

@@ -74,7 +74,7 @@ namespace AyaNova.Api.Controllers
try try
{ {
DataListSavedColumnViewBiz viewbiz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext); DataListColumnViewBiz viewbiz = DataListColumnViewBiz.GetBiz(ct, HttpContext);
var SavedView = await viewbiz.GetAsync(UserId, tableRequest.DataListKey, true); var SavedView = await viewbiz.GetAsync(UserId, tableRequest.DataListKey, true);
DataListSavedFilter SavedFilter = null; DataListSavedFilter SavedFilter = null;

View File

@@ -134,7 +134,7 @@ namespace AyaNova.Biz
[CoreBizObject] [CoreBizObject]
PartWarehouse = 66, PartWarehouse = 66,
PartInventory = 67, PartInventory = 67,
DataListSavedColumnView = 68 DataListColumnView = 68

View File

@@ -12,24 +12,24 @@ namespace AyaNova.Biz
{ {
internal class DataListSavedColumnViewBiz : BizObject internal class DataListColumnViewBiz : BizObject
{ {
internal DataListSavedColumnViewBiz(AyContext dbcontext, long currentUserId, long userTranslationId, AuthorizationRoles UserRoles) internal DataListColumnViewBiz(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.DataListSavedColumnView; BizType = AyaType.DataListColumnView;
} }
internal static DataListSavedColumnViewBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null) internal static DataListColumnViewBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null)
{ {
if (httpContext != null) if (httpContext != null)
return new DataListSavedColumnViewBiz(ct, UserIdFromContext.Id(httpContext.Items), UserTranslationIdFromContext.Id(httpContext.Items), UserRolesFromContext.Roles(httpContext.Items)); return new DataListColumnViewBiz(ct, UserIdFromContext.Id(httpContext.Items), UserTranslationIdFromContext.Id(httpContext.Items), UserRolesFromContext.Roles(httpContext.Items));
else else
return new DataListSavedColumnViewBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, AuthorizationRoles.BizAdminFull); return new DataListColumnViewBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, AuthorizationRoles.BizAdminFull);
} }
@@ -38,14 +38,14 @@ namespace AyaNova.Biz
//EXISTS //EXISTS
internal async Task<bool> ExistsAsync(long id) internal async Task<bool> ExistsAsync(long id)
{ {
return await ct.DataListSavedColumnView.AnyAsync(z => z.Id == id); return await ct.DataListColumnView.AnyAsync(z => z.Id == id);
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//CREATE //CREATE
// //
internal async Task<DataListSavedColumnView> CreateAsync(DataListSavedColumnView newObject) internal async Task<DataListColumnView> CreateAsync(DataListColumnView newObject)
{ {
ValidateAsync(newObject); ValidateAsync(newObject);
if (HasErrors) if (HasErrors)
@@ -56,11 +56,11 @@ namespace AyaNova.Biz
var dbObject = await GetAsync(newObject.UserId, newObject.ListKey, false); var dbObject = await GetAsync(newObject.UserId, newObject.ListKey, false);
if (dbObject != null) if (dbObject != null)
{ {
ct.DataListSavedColumnView.Remove(dbObject); ct.DataListColumnView.Remove(dbObject);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
} }
await ct.DataListSavedColumnView.AddAsync(newObject); await ct.DataListColumnView.AddAsync(newObject);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
return newObject; return newObject;
@@ -74,16 +74,16 @@ namespace AyaNova.Biz
//GET //GET
// //
// //
internal async Task<DataListSavedColumnView> GetAsync(long userId, string listKey, bool createDefaultIfNecessary) internal async Task<DataListColumnView> GetAsync(long userId, string listKey, bool createDefaultIfNecessary)
{ {
var ret = await ct.DataListSavedColumnView.AsNoTracking().SingleOrDefaultAsync(z => z.UserId == userId && z.ListKey == listKey); var ret = await ct.DataListColumnView.AsNoTracking().SingleOrDefaultAsync(z => z.UserId == userId && z.ListKey == listKey);
if (ret == null && createDefaultIfNecessary) if (ret == null && createDefaultIfNecessary)
{ {
if (!DataListFactory.ListKeyIsValid(listKey)) if (!DataListFactory.ListKeyIsValid(listKey))
{ {
throw new System.ArgumentOutOfRangeException($"ListKey '{listKey}' is not a valid DataListKey"); throw new System.ArgumentOutOfRangeException($"ListKey '{listKey}' is not a valid DataListKey");
} }
ret = new DataListSavedColumnView(); ret = new DataListColumnView();
ret.UserId = UserId; ret.UserId = UserId;
ret.ListKey = listKey; ret.ListKey = listKey;
var dataList = DataListFactory.GetAyaDataList(listKey); var dataList = DataListFactory.GetAyaDataList(listKey);
@@ -99,7 +99,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//DELETE (RESET) //DELETE (RESET)
// //
internal async Task<DataListSavedColumnView> DeleteAsync(long userId, string listKey) internal async Task<DataListColumnView> DeleteAsync(long userId, string listKey)
{ {
//this is effectively the RESET route handler //this is effectively the RESET route handler
//so it can be called any time even if there is no default list and it's a-ok //so it can be called any time even if there is no default list and it's a-ok
@@ -108,7 +108,7 @@ namespace AyaNova.Biz
var dbObject = await GetAsync(userId, listKey, false); var dbObject = await GetAsync(userId, listKey, false);
if (dbObject != null) if (dbObject != null)
{ {
ct.DataListSavedColumnView.Remove(dbObject); ct.DataListColumnView.Remove(dbObject);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
dbObject = await GetAsync(userId, listKey, true); dbObject = await GetAsync(userId, listKey, true);
} }
@@ -121,7 +121,7 @@ namespace AyaNova.Biz
// //
//Can save or update? //Can save or update?
private void ValidateAsync(DataListSavedColumnView inObj) private void ValidateAsync(DataListColumnView inObj)
{ {
if (inObj.UserId != UserId) if (inObj.UserId != UserId)

View File

@@ -600,7 +600,7 @@ namespace AyaNova.Biz
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from anotifysubscription where userid = {dbObject.Id}"); await ct.Database.ExecuteSqlInterpolatedAsync($"delete from anotifysubscription where userid = {dbObject.Id}");
//personal datalist options //personal datalist options
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adatalistsavedfilter where public = {false} and userid = {dbObject.Id}"); await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adatalistsavedfilter where public = {false} and userid = {dbObject.Id}");
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adatalistsavedcolumnview where userid = {dbObject.Id}"); await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adatalistcolumnview where userid = {dbObject.Id}");
//Dashboard view //Dashboard view
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adashboardview where userid = {dbObject.Id}"); await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adashboardview where userid = {dbObject.Id}");

View File

@@ -23,7 +23,7 @@ namespace AyaNova.Models
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<DataListSavedFilter> DataListSavedFilter { get; set; } public virtual DbSet<DataListSavedFilter> DataListSavedFilter { get; set; }
public virtual DbSet<DataListSavedColumnView> DataListSavedColumnView { get; set; } public virtual DbSet<DataListColumnView> DataListColumnView { 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

@@ -5,7 +5,7 @@ namespace AyaNova.Models
{ {
//this is a hiearchical object so saving as a JSON fragment still best option //this is a hiearchical object so saving as a JSON fragment still best option
public class DataListSavedColumnView public class DataListColumnView
{ {
public long Id { get; set; } public long Id { get; set; }
public uint Concurrency { get; set; } public uint Concurrency { get; set; }

View File

@@ -6,7 +6,7 @@ namespace AyaNova.Models
public class DataListReportProcessingOptions : DataListSelectedProcessingOptions public class DataListReportProcessingOptions : DataListSelectedProcessingOptions
{ {
internal DataListReportProcessingOptions(DataListSelectedRequest request, IDataListProcessing dataList, DataListSavedColumnView savedView, DataListSavedFilter savedFilter, long userId, AuthorizationRoles userRoles) : base(request, dataList, savedView, savedFilter, userId, userRoles) internal DataListReportProcessingOptions(DataListSelectedRequest request, IDataListProcessing dataList, DataListColumnView savedView, DataListSavedFilter savedFilter, long userId, AuthorizationRoles userRoles) : base(request, dataList, savedView, savedFilter, userId, userRoles)
{ {
} }

View File

@@ -20,7 +20,7 @@ namespace AyaNova.Models
internal DataListSelectedProcessingOptions( internal DataListSelectedProcessingOptions(
DataListSelectedRequest request, DataListSelectedRequest request,
IDataListProcessing dataList, IDataListProcessing dataList,
DataListSavedColumnView savedView, DataListColumnView savedView,
DataListSavedFilter savedFilter, DataListSavedFilter savedFilter,
long userId, long userId,
AuthorizationRoles userRoles) AuthorizationRoles userRoles)
@@ -51,7 +51,7 @@ namespace AyaNova.Models
public static async Task<long[]> RehydrateIdList(DataListSelectedRequest selectedRequest, AyContext ct, AuthorizationRoles userRoles, Microsoft.Extensions.Logging.ILogger log, long userId, long userTranslationId) 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); DataListColumnViewBiz viewbiz = new DataListColumnViewBiz(ct, userId, userTranslationId, userRoles);
var SavedView = await viewbiz.GetAsync(userId, selectedRequest.DataListKey, true); var SavedView = await viewbiz.GetAsync(userId, selectedRequest.DataListKey, true);
DataListSavedFilter SavedFilter = null; DataListSavedFilter SavedFilter = null;

View File

@@ -19,7 +19,7 @@ namespace AyaNova.Models
internal DataListTableProcessingOptions( internal DataListTableProcessingOptions(
DataListTableRequest request, DataListTableRequest request,
IDataListProcessing dataList, IDataListProcessing dataList,
DataListSavedColumnView savedView, DataListColumnView savedView,
DataListSavedFilter savedFilter, DataListSavedFilter savedFilter,
long userId, long userId,
AuthorizationRoles userRoles) AuthorizationRoles userRoles)

View File

@@ -396,7 +396,7 @@ BEGIN
when 65 then aytable = 'apartassembly'; when 65 then aytable = 'apartassembly';
when 66 then aytable = 'apartwarehouse'; when 66 then aytable = 'apartwarehouse';
when 67 then aytable = 'apartinventory'; aynamecolumn='description'; when 67 then aytable = 'apartinventory'; aynamecolumn='description';
when 68 then return format('DataListSavedColumnView %L', ayobjectid); when 68 then return format('DataListColumnView %L', ayobjectid);
else else
RETURN returnstr; RETURN returnstr;
end case; end case;
@@ -505,7 +505,7 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
////////////////////////////////////////////////// //////////////////////////////////////////////////
//DATALISTSAVEDFILTER / DATALISTSAVEDCOLUMNVIEW //DATALISTSAVEDFILTER / DATALISTCOLUMNVIEW
if (currentSchema < 7) if (currentSchema < 7)
{ {
LogUpdateMessage(log); LogUpdateMessage(log);
@@ -513,7 +513,7 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
await ExecQueryAsync("CREATE TABLE adatalistsavedfilter (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, userid BIGINT NOT NULL, name TEXT NOT NULL, 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, public BOOL NOT NULL, "
+ "defaultfilter BOOL NOT NULL, listkey VARCHAR(255) NOT NULL, filter TEXT)"); + "defaultfilter BOOL NOT NULL, listkey VARCHAR(255) NOT NULL, filter TEXT)");
await ExecQueryAsync("CREATE TABLE adatalistsavedcolumnview (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, userid BIGINT NOT NULL, " await ExecQueryAsync("CREATE TABLE adatalistcolumnview (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, userid BIGINT NOT NULL, "
+ "listkey VARCHAR(255) NOT NULL, columns TEXT, sort TEXT)"); + "listkey VARCHAR(255) NOT NULL, columns TEXT, sort TEXT)");

View File

@@ -318,7 +318,7 @@ namespace AyaNova.Util
await EraseTableAsync("awidget", conn); await EraseTableAsync("awidget", conn);
await EraseTableAsync("aevent", conn); await EraseTableAsync("aevent", conn);
await EraseTableAsync("adatalistsavedfilter", conn); await EraseTableAsync("adatalistsavedfilter", conn);
await EraseTableAsync("adatalistsavedcolumnview", conn); await EraseTableAsync("adatalistcolumnview", conn);
await EraseTableAsync("apicklisttemplate", conn, true); await EraseTableAsync("apicklisttemplate", conn, true);
await EraseTableAsync("aformcustom", conn); await EraseTableAsync("aformcustom", conn);
await EraseTableAsync("asearchkey", conn); await EraseTableAsync("asearchkey", conn);