Modify aygetname postgres function to handle translation of items that do not have a name, also code to back it at server

This commit is contained in:
2021-11-10 01:02:09 +00:00
parent cd6ee9890f
commit 92f06ec12f
23 changed files with 229 additions and 97 deletions

2
.vscode/launch.json vendored
View File

@@ -55,7 +55,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": "true", "AYANOVA_SERVER_TEST_MODE": "false",
"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_14\\bin\\" "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_14\\bin\\"

View File

@@ -85,10 +85,12 @@ namespace AyaNova.Api.Controllers
DataListSavedFilterBiz filterbiz = DataListSavedFilterBiz.GetBiz(ct, HttpContext); DataListSavedFilterBiz filterbiz = DataListSavedFilterBiz.GetBiz(ct, HttpContext);
SavedFilter = await filterbiz.GetAsync(tableRequest.FilterId); SavedFilter = await filterbiz.GetAsync(tableRequest.FilterId);
} }
var DataList = DataListFactory.GetAyaDataList(tableRequest.DataListKey); var DataList = DataListFactory.GetAyaDataList(tableRequest.DataListKey, UserTranslationIdFromContext.Id(HttpContext.Items));
if (DataList == null) if (DataList == null)
return BadRequest(new ApiErrorResponse(ApiErrorCode.NOT_FOUND, "DataListKey", $"DataList \"{tableRequest.DataListKey}\" specified does not exist")); return BadRequest(new ApiErrorResponse(ApiErrorCode.NOT_FOUND, "DataListKey", $"DataList \"{tableRequest.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());
@@ -172,7 +174,7 @@ namespace AyaNova.Api.Controllers
if (!serverState.IsOpen && UserIdFromContext.Id(HttpContext.Items) != 1)//bypass for superuser to fix fundamental problems if (!serverState.IsOpen && UserIdFromContext.Id(HttpContext.Items) != 1)//bypass for superuser to fix fundamental problems
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
var DataList = DataListFactory.GetAyaDataList(DataListKey); var DataList = DataListFactory.GetAyaDataList(DataListKey, UserTranslationIdFromContext.Id(HttpContext.Items));
//was the name not found as a list? //was the name not found as a list?
if (DataList == null) if (DataList == null)
{ {

View File

@@ -64,7 +64,7 @@ namespace AyaNova.Api.Controllers
if (!ModelState.IsValid) if (!ModelState.IsValid)
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
var ret = await EventLogProcessor.GetLogForObjectAsync(opt, ct); var ret = await EventLogProcessor.GetLogForObjectAsync(opt, UserTranslationIdFromContext.Id(HttpContext.Items), ct);
return Ok(ApiOkResponse.Response(ret)); return Ok(ApiOkResponse.Response(ret));
} }
@@ -94,7 +94,7 @@ namespace AyaNova.Api.Controllers
return StatusCode(403, new ApiNotAuthorizedResponse()); return StatusCode(403, new ApiNotAuthorizedResponse());
} }
var ret = await EventLogProcessor.GetLogForUserAsync(opt, ct); var ret = await EventLogProcessor.GetLogForUserAsync(opt, UserTranslationIdFromContext.Id(HttpContext.Items), ct);
return Ok(ApiOkResponse.Response(ret)); return Ok(ApiOkResponse.Response(ret));
} }
@@ -113,8 +113,8 @@ namespace AyaNova.Api.Controllers
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));
//NOTE: only bizadmin full and opsadminfull have this right so it's perfect for this task //NOTE: only bizadmin full and opsadminfull have this right so it's perfect for this task
if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.License)) if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.License))
return StatusCode(403, new ApiNotAuthorizedResponse()); return StatusCode(403, new ApiNotAuthorizedResponse());
if (!ModelState.IsValid) if (!ModelState.IsValid)

View File

@@ -55,7 +55,7 @@ namespace AyaNova.Api.Controllers
if (id == 0) if (id == 0)
return Ok(ApiOkResponse.Response(aType.ToString())); return Ok(ApiOkResponse.Response(aType.ToString()));
return Ok(ApiOkResponse.Response(BizObjectNameFetcherDirect.Name(aType, id, ct))); return Ok(ApiOkResponse.Response(BizObjectNameFetcherDirect.Name(aType, id,UserTranslationIdFromContext.Id(HttpContext.Items), ct)));
} }

View File

@@ -41,7 +41,7 @@ namespace AyaNova.DataList
FieldKey = "object", FieldKey = "object",
UiFieldDataType = (int)UiFieldDataType.Text, UiFieldDataType = (int)UiFieldDataType.Text,
SqlIdColumnName = "afileattachment.AttachToObjectid", SqlIdColumnName = "afileattachment.AttachToObjectid",
SqlValueColumnName = "AYGETNAME(afileattachment.AttachToObjectid, afileattachment.attachtoatype)", SqlValueColumnName = $"AYGETNAME(afileattachment.AttachToObjectid, afileattachment.attachtoatype,{CurrentUserTranslationId})",
SqlATypeColumnName = "afileattachment.attachtoatype", SqlATypeColumnName = "afileattachment.attachtoatype",
Translate=true Translate=true
}); });

View File

@@ -9,10 +9,12 @@ namespace AyaNova.DataList
//Instantiate list object specified //Instantiate list object specified
//this is safe as it's only attempting to load assemblies in the AyaNova.DataList namespace so can't attempt to instantiate some random object or nefarious object //this is safe as it's only attempting to load assemblies in the AyaNova.DataList namespace so can't attempt to instantiate some random object or nefarious object
//returns null if doesn't exist //returns null if doesn't exist
internal static IDataListProcessing GetAyaDataList(string ListKey) internal static IDataListProcessing GetAyaDataList(string ListKey, long translationId)
{ {
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly(); System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
return ass.CreateInstance($"AyaNova.DataList.{ListKey}") as IDataListProcessing; var v= ass.CreateInstance($"AyaNova.DataList.{ListKey}") as IDataListProcessing;
v.CurrentUserTranslationId=translationId;
return v;
} }
//List all the datalist types available //List all the datalist types available

View File

@@ -30,7 +30,8 @@ namespace AyaNova.DataList
public List<DataListFieldDefinition> FieldDefinitions { get; set; } public List<DataListFieldDefinition> FieldDefinitions { get; set; }
public AuthorizationRoles AllowedRoles { get; set; } public AuthorizationRoles AllowedRoles { get; set; }
public AyaType DefaultListAType { get; set; } public AyaType DefaultListAType { get; set; }
public long CurrentUserId { get; set; } //public long CurrentUserId { get; set; }
public long CurrentUserTranslationId { get; set; }
public List<string> DefaultColumns { get; set; } public List<string> DefaultColumns { get; set; }
public Dictionary<string, string> DefaultSortBy { get; set; } public Dictionary<string, string> DefaultSortBy { get; set; }
@@ -133,7 +134,7 @@ namespace AyaNova.DataList
//Not Sortable? //Not Sortable?
if (!o.IsSortable) if (!o.IsSortable)
sb.Append($",\"ns\":1"); sb.Append($",\"ns\":1");
//Not Filterable? //Not Filterable?
if (!o.IsFilterable) if (!o.IsFilterable)
sb.Append($",\"nf\":1"); sb.Append($",\"nf\":1");

View File

@@ -48,7 +48,7 @@ namespace AyaNova.DataList
FieldKey = "object", FieldKey = "object",
UiFieldDataType = (int)UiFieldDataType.Text, UiFieldDataType = (int)UiFieldDataType.Text,
SqlIdColumnName = "aevent.ayid", SqlIdColumnName = "aevent.ayid",
SqlValueColumnName = "AYGETNAME(aevent.ayid, aevent.ayatype)", SqlValueColumnName = $"AYGETNAME(aevent.ayid, aevent.ayatype,{CurrentUserTranslationId})",
SqlATypeColumnName = "aevent.ayatype" SqlATypeColumnName = "aevent.ayatype"
}); });

View File

@@ -17,5 +17,7 @@ namespace AyaNova.DataList
Dictionary<string, string> DefaultSortBy { get; set; } Dictionary<string, string> DefaultSortBy { get; set; }
void SetListOptionDefaultsIfNecessary(Models.DataListProcessingBase listOptions); void SetListOptionDefaultsIfNecessary(Models.DataListProcessingBase listOptions);
Newtonsoft.Json.Linq.JArray GenerateReturnListColumns(List<string> columns); Newtonsoft.Json.Linq.JArray GenerateReturnListColumns(List<string> columns);
long CurrentUserTranslationId { get; set; }
} }
} }

View File

@@ -28,7 +28,7 @@ namespace AyaNova.DataList
FieldKey = "PartInventoryTransactionSource", FieldKey = "PartInventoryTransactionSource",
UiFieldDataType = (int)UiFieldDataType.Text, UiFieldDataType = (int)UiFieldDataType.Text,
SqlIdColumnName = "apartinventory.sourceid", SqlIdColumnName = "apartinventory.sourceid",
SqlValueColumnName = "AYGETNAME(apartinventory.sourceid, apartinventory.sourcetype)", SqlValueColumnName = $"AYGETNAME(apartinventory.sourceid, apartinventory.sourcetype,{CurrentUserTranslationId})",
SqlATypeColumnName = "apartinventory.sourcetype", SqlATypeColumnName = "apartinventory.sourcetype",
Translate=true Translate=true
}); });

View File

@@ -25,7 +25,7 @@ namespace AyaNova.DataList
FieldKey = "Object", FieldKey = "Object",
UiFieldDataType = (int)UiFieldDataType.Text, UiFieldDataType = (int)UiFieldDataType.Text,
SqlIdColumnName = "areview.objectid", SqlIdColumnName = "areview.objectid",
SqlValueColumnName = "AYGETNAME(areview.objectid, areview.aType)", SqlValueColumnName = $"AYGETNAME(areview.objectid, areview.aType,{CurrentUserTranslationId})",
SqlATypeColumnName = "areview.aType", SqlATypeColumnName = "areview.aType",
Translate=true Translate=true
}); });

View File

@@ -26,7 +26,7 @@
// FieldKey = "ServiceBankSourceRootAType", // FieldKey = "ServiceBankSourceRootAType",
// UiFieldDataType = (int)UiFieldDataType.Text, // UiFieldDataType = (int)UiFieldDataType.Text,
// SqlIdColumnName = "aservicebank.sourceid", // SqlIdColumnName = "aservicebank.sourceid",
// SqlValueColumnName = "AYGETNAME(aservicebank.sourceid, aservicebank.sourcetype)", // SqlValueColumnName = $"AYGETNAME(aservicebank.sourceid, aservicebank.sourcetype,{CurrentUserTranslationId})",
// SqlATypeColumnName = "aservicebank.sourcetype" // SqlATypeColumnName = "aservicebank.sourcetype"
// }); // });
@@ -36,7 +36,7 @@
// FieldKey = "Object", // FieldKey = "Object",
// UiFieldDataType = (int)UiFieldDataType.Text, // UiFieldDataType = (int)UiFieldDataType.Text,
// SqlIdColumnName = "aservicebank.objectid", // SqlIdColumnName = "aservicebank.objectid",
// SqlValueColumnName = "AYGETNAME(aservicebank.objectid, aservicebank.aType)", // SqlValueColumnName = $"AYGETNAME(aservicebank.objectid, aservicebank.aType,{CurrentUserTranslationId})",
// SqlATypeColumnName = "aservicebank.aType" // SqlATypeColumnName = "aservicebank.aType"
// }); // });

View File

@@ -7,13 +7,13 @@ namespace AyaNova.Biz
//Used by search and eventlog processor //Used by search and eventlog processor
internal static class BizObjectNameFetcherDirect internal static class BizObjectNameFetcherDirect
{ {
internal static string Name(AyaType ayaType, long id, System.Data.Common.DbCommand cmd) internal static string Name(AyaType ayaType, long id, long translationid, System.Data.Common.DbCommand cmd)
{ {
try try
{ {
string ret; string ret;
cmd.CommandText = $"select PUBLIC.AYGETNAME({id}, {(int)ayaType}) as m"; cmd.CommandText = $"select PUBLIC.AYGETNAME({id}, {(int)ayaType}, {translationid}) as m";
using (var dr = cmd.ExecuteReader()) using (var dr = cmd.ExecuteReader())
{ {
if (dr.Read()) if (dr.Read())
@@ -40,12 +40,12 @@ namespace AyaNova.Biz
} }
//warning: use the above in a loop, not this one //warning: use the above in a loop, not this one
internal static string Name(AyaType ayaType, long id, AyaNova.Models.AyContext ct) internal static string Name(AyaType ayaType, long id, long translationId, AyaNova.Models.AyContext ct)
{ {
using (var command = ct.Database.GetDbConnection().CreateCommand()) using (var command = ct.Database.GetDbConnection().CreateCommand())
{ {
ct.Database.OpenConnection(); ct.Database.OpenConnection();
return Name(ayaType, id, command); return Name(ayaType, id,translationId, command);
} }
} }

View File

@@ -495,7 +495,7 @@ namespace AyaNova.Biz
var subs = await ct.NotifySubscription.Where(z => z.EventType == NotifyEventType.CSRAccepted).ToListAsync(); var subs = await ct.NotifySubscription.Where(z => z.EventType == NotifyEventType.CSRAccepted).ToListAsync();
string SourceName = string.Empty; string SourceName = string.Empty;
if (subs.Count > 0) if (subs.Count > 0)
SourceName = BizObjectNameFetcherDirect.Name(BizType, o.Id, ct); SourceName = BizObjectNameFetcherDirect.Name(BizType, o.Id, UserTranslationId, ct);
foreach (var sub in subs) foreach (var sub in subs)
{ {
//not for inactive users //not for inactive users
@@ -522,7 +522,7 @@ namespace AyaNova.Biz
var subs = await ct.NotifySubscription.Where(z => z.EventType == NotifyEventType.CSRRejected).ToListAsync(); var subs = await ct.NotifySubscription.Where(z => z.EventType == NotifyEventType.CSRRejected).ToListAsync();
string SourceName = string.Empty; string SourceName = string.Empty;
if (subs.Count > 0) if (subs.Count > 0)
SourceName = BizObjectNameFetcherDirect.Name(BizType, o.Id, ct); SourceName = BizObjectNameFetcherDirect.Name(BizType, o.Id, UserTranslationId, ct);
foreach (var sub in subs) foreach (var sub in subs)
{ {
//not for inactive users //not for inactive users

View File

@@ -113,7 +113,7 @@ namespace AyaNova.Biz
var ret = new DataListColumnView(); var 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, 0);
ret.Columns = JsonConvert.SerializeObject(dataList.DefaultColumns); ret.Columns = JsonConvert.SerializeObject(dataList.DefaultColumns);
ret.Sort = JsonConvert.SerializeObject(dataList.DefaultSortBy); ret.Sort = JsonConvert.SerializeObject(dataList.DefaultSortBy);
return await CreateAsync(ret); return await CreateAsync(ret);

View File

@@ -104,7 +104,7 @@ namespace AyaNova.Biz
throw new System.ArgumentOutOfRangeException($"ListKey '{listKey}' is not a valid DataListKey"); throw new System.ArgumentOutOfRangeException($"ListKey '{listKey}' is not a valid DataListKey");
} }
var dataList = DataListFactory.GetAyaDataList(listKey); var dataList = DataListFactory.GetAyaDataList(listKey,0);
DataListSavedFilter d = new DataListSavedFilter(); DataListSavedFilter d = new DataListSavedFilter();
d.ListKey = listKey; d.ListKey = listKey;

View File

@@ -46,7 +46,7 @@ namespace AyaNova.Biz
/// Get the event log for a specified object /// Get the event log for a specified object
/// Presentation is the client's responsibility (localization internationalization etc) /// Presentation is the client's responsibility (localization internationalization etc)
/// </summary> /// </summary>
internal static async Task<AyaNova.Api.Controllers.EventLogController.ObjectEventLog> GetLogForObjectAsync(AyaNova.Api.Controllers.EventLogController.EventLogOptions opt, AyContext ct) internal static async Task<AyaNova.Api.Controllers.EventLogController.ObjectEventLog> GetLogForObjectAsync(AyaNova.Api.Controllers.EventLogController.EventLogOptions opt, long translationId, AyContext ct)
{ {
AyaNova.Api.Controllers.EventLogController.ObjectEventLog ret = new Api.Controllers.EventLogController.ObjectEventLog(); AyaNova.Api.Controllers.EventLogController.ObjectEventLog ret = new Api.Controllers.EventLogController.ObjectEventLog();
@@ -72,10 +72,10 @@ namespace AyaNova.Biz
UserId = z.UserId, UserId = z.UserId,
Event = z.AyEvent, Event = z.AyEvent,
Textra = z.Textra, Textra = z.Textra,
Name = BizObjectNameFetcherDirect.Name(AyaType.User, z.UserId, command) Name = BizObjectNameFetcherDirect.Name(AyaType.User, z.UserId, translationId, command)
}).ToArray(); }).ToArray();
ret.Name = BizObjectNameFetcherDirect.Name(opt.AyaType, opt.AyId, command); ret.Name = BizObjectNameFetcherDirect.Name(opt.AyaType, opt.AyId, translationId, command);
return ret; return ret;
} }
} }
@@ -86,7 +86,7 @@ namespace AyaNova.Biz
/// Get the event log for a specified User /// Get the event log for a specified User
/// Presentation is the client's responsibility (localization internationalization etc) /// Presentation is the client's responsibility (localization internationalization etc)
/// </summary> /// </summary>
internal static async Task<AyaNova.Api.Controllers.EventLogController.UserEventLog> GetLogForUserAsync(AyaNova.Api.Controllers.EventLogController.UserEventLogOptions opt, AyContext ct) internal static async Task<AyaNova.Api.Controllers.EventLogController.UserEventLog> GetLogForUserAsync(AyaNova.Api.Controllers.EventLogController.UserEventLogOptions opt, long translationId, AyContext ct)
{ {
AyaNova.Api.Controllers.EventLogController.UserEventLog ret = new Api.Controllers.EventLogController.UserEventLog(); AyaNova.Api.Controllers.EventLogController.UserEventLog ret = new Api.Controllers.EventLogController.UserEventLog();
@@ -115,10 +115,10 @@ namespace AyaNova.Biz
ObjectId = z.AyId, ObjectId = z.AyId,
Event = z.AyEvent, Event = z.AyEvent,
Textra = z.Textra, Textra = z.Textra,
Name = BizObjectNameFetcherDirect.Name(z.AyaType, z.AyId, command) Name = BizObjectNameFetcherDirect.Name(z.AyaType, z.AyId, translationId, command)
}).ToArray(); }).ToArray();
ret.Name = BizObjectNameFetcherDirect.Name(AyaType.User, opt.UserId, command); ret.Name = BizObjectNameFetcherDirect.Name(AyaType.User, opt.UserId, translationId, command);
return ret; return ret;
} }

View File

@@ -298,7 +298,7 @@ namespace AyaNova.Biz
if (o.SourceType != null) if (o.SourceType != null)
o.SourceTypeViz = ayaTypesEnumList.Where(x => x.Id == (long)o.SourceType).Select(x => x.Name).First(); o.SourceTypeViz = ayaTypesEnumList.Where(x => x.Id == (long)o.SourceType).Select(x => x.Name).First();
if (o.SourceType != null && o.SourceId != null) if (o.SourceType != null && o.SourceId != null)
o.SourceViz = BizObjectNameFetcherDirect.Name((AyaType)o.SourceType, (long)o.SourceId, cmd); o.SourceViz = BizObjectNameFetcherDirect.Name((AyaType)o.SourceType, (long)o.SourceId, UserTranslationId, cmd);
} }

View File

@@ -309,7 +309,7 @@ namespace AyaNova.Biz
await ValidateCanDeleteAsync(dbObject); await ValidateCanDeleteAsync(dbObject);
if (HasErrors) if (HasErrors)
return false; return false;
{ {
var IDList = await ct.Review.AsNoTracking().Where(x => x.AType == AyaType.PurchaseOrder && x.ObjectId == id).Select(x => x.Id).ToListAsync(); var IDList = await ct.Review.AsNoTracking().Where(x => x.AType == AyaType.PurchaseOrder && x.ObjectId == id).Select(x => x.Id).ToListAsync();
if (IDList.Count() > 0) if (IDList.Count() > 0)
{ {
@@ -957,7 +957,7 @@ namespace AyaNova.Biz
AyaType = AyaType.WorkOrderItemPartRequest, AyaType = AyaType.WorkOrderItemPartRequest,
ObjectId = (long)proposedRequestItem.WorkOrderItemPartRequestId, ObjectId = (long)proposedRequestItem.WorkOrderItemPartRequestId,
NotifySubscriptionId = sub.Id, NotifySubscriptionId = sub.Id,
Name = BizObjectNameFetcherDirect.Name(AyaType.WorkOrderItemPartRequest, (long)proposedRequestItem.WorkOrderItemPartRequestId, ct) Name = BizObjectNameFetcherDirect.Name(AyaType.WorkOrderItemPartRequest, (long)proposedRequestItem.WorkOrderItemPartRequestId, UserTranslationId, ct)
}; };
await ct.NotifyEvent.AddAsync(n); await ct.NotifyEvent.AddAsync(n);
log.LogDebug($"Adding NotifyEvent: [{n.ToString()}]"); log.LogDebug($"Adding NotifyEvent: [{n.ToString()}]");

View File

@@ -166,7 +166,7 @@ namespace AyaNova.Biz
} }
ValidateCanDelete(dbObject); ValidateCanDelete(dbObject);
if (HasErrors) if (HasErrors)
return false; return false;
ct.Review.Remove(dbObject); ct.Review.Remove(dbObject);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
@@ -364,7 +364,7 @@ namespace AyaNova.Biz
{ {
o.UserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.UserId).Select(x => x.Name).FirstOrDefaultAsync(); o.UserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.UserId).Select(x => x.Name).FirstOrDefaultAsync();
o.AssignedByUserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.AssignedByUserId).Select(x => x.Name).FirstOrDefaultAsync(); o.AssignedByUserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.AssignedByUserId).Select(x => x.Name).FirstOrDefaultAsync();
o.ReviewObjectViz = BizObjectNameFetcherDirect.Name(o.AType, o.ObjectId, ct); o.ReviewObjectViz = BizObjectNameFetcherDirect.Name(o.AType, o.ObjectId, UserTranslationId, ct);
if (o.ReviewObjectViz.StartsWith("LT:")) if (o.ReviewObjectViz.StartsWith("LT:"))
{ {
o.ReviewObjectViz = await Translate(o.ReviewObjectViz); o.ReviewObjectViz = await Translate(o.ReviewObjectViz);

View File

@@ -197,7 +197,7 @@ namespace AyaNova.Biz
{ {
SearchResult SR = new SearchResult(); SearchResult SR = new SearchResult();
SR.Name = BizObjectNameFetcherDirect.Name(i.AType, SR.Name = BizObjectNameFetcherDirect.Name(i.AType,
i.ObjectId, i.ObjectId,translationId,
command); command);
SR.Id = i.ObjectId; SR.Id = i.ObjectId;
SR.Type = i.AType; SR.Type = i.AType;

View File

@@ -55,10 +55,10 @@ namespace AyaNova.Models
DataListSavedFilterBiz filterbiz = new DataListSavedFilterBiz(ct, userId, userTranslationId, userRoles); DataListSavedFilterBiz filterbiz = new DataListSavedFilterBiz(ct, userId, userTranslationId, userRoles);
SavedFilter = await filterbiz.GetAsync(selectedRequest.FilterId); SavedFilter = await filterbiz.GetAsync(selectedRequest.FilterId);
} }
var DataList = DataListFactory.GetAyaDataList(selectedRequest.DataListKey); var DataList = DataListFactory.GetAyaDataList(selectedRequest.DataListKey, userTranslationId);
if (DataList == null) if (DataList == null)
throw new System.ArgumentOutOfRangeException($"DataList \"{selectedRequest.DataListKey}\" specified does not exist"); throw new System.ArgumentOutOfRangeException($"DataList \"{selectedRequest.DataListKey}\" specified does not exist");
//check rights //check rights
if (!userRoles.HasAnyFlags(DataList.AllowedRoles)) if (!userRoles.HasAnyFlags(DataList.AllowedRoles))
throw new System.UnauthorizedAccessException($"DataList \"{selectedRequest.DataListKey}\" required Roles not found for this user"); throw new System.UnauthorizedAccessException($"DataList \"{selectedRequest.DataListKey}\" required Roles not found for this user");

View File

@@ -33,7 +33,7 @@ namespace AyaNova.Util
///////////////////////////////////////////////////////////////// C1301:I153:CC518:FC193:V11:R2 ///////////////////////////////////////////////////////////////// C1301:I153:CC518:FC193:V11:R2
/* /*
@@ -357,74 +357,79 @@ END;
$BODY$; $BODY$;
"); ");
//Name fetcher function
//CoreBizObject ADD here
await ExecQueryAsync(@" /*
CREATE OR REPLACE FUNCTION PUBLIC.AYGETNAME(IN AYOBJECTID BIGINT, IN AYATYPE INTEGER) RETURNS TEXT AS $BODY$
-- FUNCTION: public.aygetnameex(bigint, integer)
-- DROP FUNCTION IF EXISTS public.aygetnameex(bigint, integer);
CREATE OR REPLACE FUNCTION PUBLIC.AYGETNAMEEX(AYOBJECTID bigint, AYATYPE integer, TRANSLATIONID integer) RETURNS text LANGUAGE 'plpgsql' COST 100 STABLE PARALLEL UNSAFE AS $BODY$
DECLARE DECLARE
aytable TEXT DEFAULT ''; aytable TEXT DEFAULT '';
aynamecolumn TEXT DEFAULT 'name'; aynamecolumn TEXT DEFAULT 'name';
aytkey TEXT DEFAULT 'no';
returnstr TEXT DEFAULT ''; returnstr TEXT DEFAULT '';
BEGIN BEGIN
case ayatype case ayatype
when 0 then return 'LT:NoType'; when 0 then aytkey= 'NoType';
when 1 then return 'LT:Global'; when 1 then aytkey= 'Global';
when 2 then return 'FormUserOptions'; when 2 then return 'FormUserOptions';
when 3 then aytable = 'auser'; when 3 then aytable = 'auser';
when 4 then return 'LT:ServerState'; when 4 then aytkey= 'ServerState';
when 5 then return 'LT:License'; when 5 then aytkey= 'License';
when 6 then return 'LT:LogFile'; when 6 then aytkey= 'LogFile';
when 7 then return 'LT:PickListTemplate'; when 7 then aytkey= 'PickListTemplate';
when 8 then aytable = 'acustomer'; when 8 then aytable = 'acustomer';
when 9 then return 'LT:ServerJob'; when 9 then aytkey= 'ServerJob';
when 10 then aytable = 'acontract'; when 10 then aytable = 'acontract';
when 11 then return 'LT:TrialSeeder'; when 11 then aytkey= 'TrialSeeder';
when 12 then return 'LT:ServerMetrics'; when 12 then aytkey= 'ServerMetrics';
when 13 then aytable = 'atranslation'; when 13 then aytable = 'atranslation';
when 14 then return 'LT:UserOptions'; when 14 then aytkey= 'UserOptions';
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 = 'adatalistsavedfilter'; 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';
when 22 then return 'LT:PMItem'; when 22 then aytkey= 'PMItem';
when 23 then return 'LT:WorkOrderItemExpense'; when 23 then aytkey= 'WorkOrderItemExpense';
when 24 then return 'LT:WorkOrderItemLabor'; when 24 then aytkey= 'WorkOrderItemLabor';
when 25 then aytable = 'aproject'; when 25 then aytable = 'aproject';
when 26 then aytable = 'apurchaseorder'; aynamecolumn = 'serial'; when 26 then aytable = 'apurchaseorder'; aynamecolumn = 'serial';
when 27 then aytable = 'aquote'; aynamecolumn = 'serial'; when 27 then aytable = 'aquote'; aynamecolumn = 'serial';
when 28 then return 'LT:QuoteItem'; when 28 then aytkey= 'QuoteItem';
when 29 then return 'LT:WorkOrderItemLoan'; when 29 then aytkey= 'WorkOrderItemLoan';
when 30 then return 'LT:WorkOrderItemPart'; when 30 then aytkey= 'WorkOrderItemPart';
when 31 then aytable = 'aunit'; aynamecolumn = 'serial'; when 31 then aytable = 'aunit'; aynamecolumn = 'serial';
when 32 then aytable = 'aunitmodel'; aynamecolumn = 'name'; when 32 then aytable = 'aunitmodel'; aynamecolumn = 'name';
when 33 then aytable = 'avendor'; when 33 then aytable = 'avendor';
when 34 then aytable = 'aworkorder'; aynamecolumn = 'serial'; when 34 then aytable = 'aworkorder'; aynamecolumn = 'serial';
when 35 then return 'LT:WorkOrderItem'; when 35 then aytkey= 'WorkOrderItem';
when 36 then return 'LT:WorkOrderItemExpense'; when 36 then aytkey= 'WorkOrderItemExpense';
when 37 then return 'LT:WorkOrderItemLabor'; when 37 then aytkey= 'WorkOrderItemLabor';
when 38 then return 'LT:WorkOrderItemLoan'; when 38 then aytkey= 'WorkOrderItemLoan';
when 39 then return 'LT:WorkOrderItemPart'; when 39 then aytkey= 'WorkOrderItemPart';
when 40 then return 'LT:WorkOrderItemPartRequest'; when 40 then aytkey= 'WorkOrderItemPartRequest';
when 41 then return 'LT:WorkOrderItemScheduledUser'; when 41 then aytkey= 'WorkOrderItemScheduledUser';
when 42 then return 'LT:WorkOrderItemTask'; when 42 then aytkey= 'WorkOrderItemTask';
when 43 then return 'LT:WorkOrderItemTravel'; when 43 then aytkey= 'WorkOrderItemTravel';
when 44 then return 'LT:WorkOrderItemUnit'; when 44 then aytkey= 'WorkOrderItemUnit';
when 45 then return 'LT:WorkOrderItemScheduledUser'; when 45 then aytkey= 'WorkOrderItemScheduledUser';
when 46 then return 'LT:WorkOrderItemTask'; when 46 then aytkey= 'WorkOrderItemTask';
when 47 then return 'LT:GlobalOps'; when 47 then aytkey= 'GlobalOps';
when 48 then return 'LT:BizMetrics'; when 48 then aytkey= 'BizMetrics';
when 49 then return 'LT:Backup'; when 49 then aytkey= 'Backup';
when 50 then aytable = 'ainappnotification'; when 50 then aytable = 'ainappnotification';
when 51 then return 'LT:NotifySubscription'; when 51 then aytkey= 'NotifySubscription';
when 52 then aytable = 'areminder'; when 52 then aytable = 'areminder';
when 53 then return 'LT:UnitMeterReading'; when 53 then aytkey= 'UnitMeterReading';
when 54 then aytable = 'acustomerservicerequest'; when 54 then aytable = 'acustomerservicerequest';
when 56 then return 'LT:OpsNotificationSettings'; when 56 then aytkey= 'OpsNotificationSettings';
when 57 then aytable = 'areport'; when 57 then aytable = 'areport';
when 58 then return 'LT:DashBoardView'; when 58 then aytkey= 'DashBoardView';
when 59 then aytable = 'acustomernote'; aynamecolumn = 'notedate'; when 59 then aytable = 'acustomernote'; aynamecolumn = 'notedate';
when 60 then aytable = 'amemo'; when 60 then aytable = 'amemo';
when 61 then aytable = 'areview'; when 61 then aytable = 'areview';
@@ -437,27 +442,147 @@ BEGIN
when 68 then return format('DataListColumnView %L', ayobjectid); when 68 then return format('DataListColumnView %L', ayobjectid);
when 71 then aytable = 'aworkorderstatus'; when 71 then aytable = 'aworkorderstatus';
when 72 then aytable = 'aTaskGroup'; when 72 then aytable = 'aTaskGroup';
when 73 then return 'LT:WorkOrderItemOutsideService'; when 73 then aytkey= 'WorkOrderItemOutsideService';
when 74 then aytable = 'aWorkOrderItemPriority'; when 74 then aytable = 'aWorkOrderItemPriority';
when 75 then aytable = 'aWorkOrderItemStatus'; when 75 then aytable = 'aWorkOrderItemStatus';
when 76 then return 'LT:WorkOrderItemTravel'; when 76 then aytkey= 'WorkOrderItemTravel';
when 77 then return 'LT:WorkOrderItemUnit'; when 77 then aytkey= 'WorkOrderItemUnit';
when 78 then aytable = 'aquotestatus'; when 78 then aytable = 'aquotestatus';
when 79 then return 'LT:WorkOrderItemOutsideService'; when 79 then aytkey= 'WorkOrderItemOutsideService';
when 80 then return 'LT:WorkOrderItemExpense'; when 80 then aytkey= 'WorkOrderItemExpense';
when 81 then return 'LT:WorkOrderItemLabor'; when 81 then aytkey= 'WorkOrderItemLabor';
when 82 then return 'LT:WorkOrderItemLoan'; when 82 then aytkey= 'WorkOrderItemLoan';
when 83 then return 'LT:WorkOrderItemPart'; when 83 then aytkey= 'WorkOrderItemPart';
when 84 then return 'LT:WorkOrderItemPartRequest'; when 84 then aytkey= 'WorkOrderItemPartRequest';
when 85 then return 'LT:WorkOrderItemScheduledUser'; when 85 then aytkey= 'WorkOrderItemScheduledUser';
when 86 then return 'LT:WorkOrderItemTask'; when 86 then aytkey= 'WorkOrderItemTask';
when 87 then return 'LT:WorkOrderItemTravel'; when 87 then aytkey= 'WorkOrderItemTravel';
when 88 then return 'LT:WorkOrderItemUnit'; when 88 then aytkey= 'WorkOrderItemUnit';
when 89 then return 'LT:WorkOrderItemOutsideService'; when 89 then aytkey= 'WorkOrderItemOutsideService';
else else
RETURN returnstr; RETURN returnstr;
end case; end case;
EXECUTE format('SELECT %I FROM %I WHERE id = %L', aynamecolumn, aytable, ayobjectid) INTO returnstr;
IF aytkey='no' then
EXECUTE format('SELECT %I FROM %I WHERE id = %L', aynamecolumn, aytable, ayobjectid) INTO returnstr;
else
EXECUTE format('select display from atranslationitem where translationid=%L and key=%L', TRANSLATIONID, aytkey) INTO returnstr;
END if;
RETURN returnstr;
END;
$BODY$;
ALTER FUNCTION PUBLIC.AYGETNAME(bigint, integer) OWNER TO POSTGRES;
*/
//Name fetcher function
//CoreBizObject ADD here
await ExecQueryAsync(@"
CREATE OR REPLACE FUNCTION PUBLIC.AYGETNAME(IN AYOBJECTID BIGINT, IN AYATYPE INTEGER,TRANSLATIONID integer) RETURNS TEXT AS $BODY$
DECLARE
aytable TEXT DEFAULT '';
aynamecolumn TEXT DEFAULT 'name';
aytkey TEXT DEFAULT 'no';
returnstr TEXT DEFAULT '';
BEGIN
case ayatype
when 0 then aytkey= 'NoType';
when 1 then aytkey= 'Global';
when 2 then return 'FormUserOptions';
when 3 then aytable = 'auser';
when 4 then aytkey= 'ServerState';
when 5 then aytkey= 'License';
when 6 then aytkey= 'LogFile';
when 7 then aytkey= 'PickListTemplate';
when 8 then aytable = 'acustomer';
when 9 then aytkey= 'ServerJob';
when 10 then aytable = 'acontract';
when 11 then aytkey= 'TrialSeeder';
when 12 then aytkey= 'ServerMetrics';
when 13 then aytable = 'atranslation';
when 14 then aytkey= 'UserOptions';
when 15 then aytable = 'aheadoffice';
when 16 then aytable = 'aloanunit';
when 17 then aytable = 'afileattachment'; aynamecolumn ='displayfilename';
when 18 then aytable = 'adatalistsavedfilter';
when 19 then aytable = 'aformcustom'; aynamecolumn = 'formkey';
when 20 then aytable = 'apart'; aynamecolumn ='partnumber';
when 21 then aytable = 'apm'; aynamecolumn ='serial';
when 22 then aytkey= 'PMItem';
when 23 then aytkey= 'WorkOrderItemExpense';
when 24 then aytkey= 'WorkOrderItemLabor';
when 25 then aytable = 'aproject';
when 26 then aytable = 'apurchaseorder'; aynamecolumn = 'serial';
when 27 then aytable = 'aquote'; aynamecolumn = 'serial';
when 28 then aytkey= 'QuoteItem';
when 29 then aytkey= 'WorkOrderItemLoan';
when 30 then aytkey= 'WorkOrderItemPart';
when 31 then aytable = 'aunit'; aynamecolumn = 'serial';
when 32 then aytable = 'aunitmodel'; aynamecolumn = 'name';
when 33 then aytable = 'avendor';
when 34 then aytable = 'aworkorder'; aynamecolumn = 'serial';
when 35 then aytkey= 'WorkOrderItem';
when 36 then aytkey= 'WorkOrderItemExpense';
when 37 then aytkey= 'WorkOrderItemLabor';
when 38 then aytkey= 'WorkOrderItemLoan';
when 39 then aytkey= 'WorkOrderItemPart';
when 40 then aytkey= 'WorkOrderItemPartRequest';
when 41 then aytkey= 'WorkOrderItemScheduledUser';
when 42 then aytkey= 'WorkOrderItemTask';
when 43 then aytkey= 'WorkOrderItemTravel';
when 44 then aytkey= 'WorkOrderItemUnit';
when 45 then aytkey= 'WorkOrderItemScheduledUser';
when 46 then aytkey= 'WorkOrderItemTask';
when 47 then aytkey= 'GlobalOps';
when 48 then aytkey= 'BizMetrics';
when 49 then aytkey= 'Backup';
when 50 then aytable = 'ainappnotification';
when 51 then aytkey= 'NotifySubscription';
when 52 then aytable = 'areminder';
when 53 then aytkey= 'UnitMeterReading';
when 54 then aytable = 'acustomerservicerequest';
when 56 then aytkey= 'OpsNotificationSettings';
when 57 then aytable = 'areport';
when 58 then aytkey= 'DashBoardView';
when 59 then aytable = 'acustomernote'; aynamecolumn = 'notedate';
when 60 then aytable = 'amemo';
when 61 then aytable = 'areview';
when 62 then aytable = 'aservicerate';
when 63 then aytable = 'atravelrate';
when 64 then aytable = 'ataxcode';
when 65 then aytable = 'apartassembly';
when 66 then aytable = 'apartwarehouse';
when 67 then aytable = 'apartinventory'; aynamecolumn='description';
when 68 then return format('DataListColumnView %L', ayobjectid);
when 71 then aytable = 'aworkorderstatus';
when 72 then aytable = 'aTaskGroup';
when 73 then aytkey= 'WorkOrderItemOutsideService';
when 74 then aytable = 'aWorkOrderItemPriority';
when 75 then aytable = 'aWorkOrderItemStatus';
when 76 then aytkey= 'WorkOrderItemTravel';
when 77 then aytkey= 'WorkOrderItemUnit';
when 78 then aytable = 'aquotestatus';
when 79 then aytkey= 'WorkOrderItemOutsideService';
when 80 then aytkey= 'WorkOrderItemExpense';
when 81 then aytkey= 'WorkOrderItemLabor';
when 82 then aytkey= 'WorkOrderItemLoan';
when 83 then aytkey= 'WorkOrderItemPart';
when 84 then aytkey= 'WorkOrderItemPartRequest';
when 85 then aytkey= 'WorkOrderItemScheduledUser';
when 86 then aytkey= 'WorkOrderItemTask';
when 87 then aytkey= 'WorkOrderItemTravel';
when 88 then aytkey= 'WorkOrderItemUnit';
when 89 then aytkey= 'WorkOrderItemOutsideService';
else
RETURN returnstr;
end case;
IF aytkey='no' then
EXECUTE format('SELECT %I FROM %I WHERE id = %L', aynamecolumn, aytable, ayobjectid) INTO returnstr;
else
EXECUTE format('select display from atranslationitem where translationid=%L and key=%L', TRANSLATIONID, aytkey) INTO returnstr;
END if;
RETURN returnstr; RETURN returnstr;
END; END;
$BODY$ LANGUAGE PLPGSQL STABLE"); $BODY$ LANGUAGE PLPGSQL STABLE");