From 92f06ec12f6747c85206517cf97cc06dfdcfacda Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Wed, 10 Nov 2021 01:02:09 +0000 Subject: [PATCH] Modify aygetname postgres function to handle translation of items that do not have a name, also code to back it at server --- .vscode/launch.json | 2 +- .../AyaNova/Controllers/DataListController.cs | 6 +- .../AyaNova/Controllers/EventLogController.cs | 8 +- server/AyaNova/Controllers/NameController.cs | 2 +- server/AyaNova/DataList/AttachmentDataList.cs | 2 +- server/AyaNova/DataList/DataListFactory.cs | 6 +- .../DataList/DataListProcessingBase.cs | 5 +- server/AyaNova/DataList/EventDataList.cs | 2 +- .../AyaNova/DataList/IDataListProcessing.cs | 2 + .../PartInventoryTransactionsDataList.cs | 2 +- server/AyaNova/DataList/ReviewDataList.cs | 2 +- .../AyaNova/DataList/ServiceBankDataList.cs | 4 +- .../AyaNova/biz/BizObjectNameFetcherDirect.cs | 8 +- .../AyaNova/biz/CustomerServiceRequestBiz.cs | 4 +- server/AyaNova/biz/DataListColumnViewBiz.cs | 2 +- server/AyaNova/biz/DataListSavedFilterBiz.cs | 2 +- server/AyaNova/biz/EventLogProcessor.cs | 12 +- server/AyaNova/biz/PartInventoryBiz.cs | 2 +- server/AyaNova/biz/PurchaseOrderBiz.cs | 4 +- server/AyaNova/biz/ReviewBiz.cs | 4 +- server/AyaNova/biz/Search.cs | 2 +- .../DataListSelectedProcessingOptions.cs | 4 +- server/AyaNova/util/AySchema.cs | 239 +++++++++++++----- 23 files changed, 229 insertions(+), 97 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 924c5283..dde42e99 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -55,7 +55,7 @@ "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "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_TZ_OFFSET": "-7", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_14\\bin\\" diff --git a/server/AyaNova/Controllers/DataListController.cs b/server/AyaNova/Controllers/DataListController.cs index 69391fad..edf42f2c 100644 --- a/server/AyaNova/Controllers/DataListController.cs +++ b/server/AyaNova/Controllers/DataListController.cs @@ -85,10 +85,12 @@ namespace AyaNova.Api.Controllers DataListSavedFilterBiz filterbiz = DataListSavedFilterBiz.GetBiz(ct, HttpContext); 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) return BadRequest(new ApiErrorResponse(ApiErrorCode.NOT_FOUND, "DataListKey", $"DataList \"{tableRequest.DataListKey}\" specified does not exist")); + + //check rights if (!UserRoles.HasAnyFlags(DataList.AllowedRoles)) 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 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? if (DataList == null) { diff --git a/server/AyaNova/Controllers/EventLogController.cs b/server/AyaNova/Controllers/EventLogController.cs index afc09349..b527381d 100644 --- a/server/AyaNova/Controllers/EventLogController.cs +++ b/server/AyaNova/Controllers/EventLogController.cs @@ -64,7 +64,7 @@ namespace AyaNova.Api.Controllers if (!ModelState.IsValid) 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)); } @@ -94,7 +94,7 @@ namespace AyaNova.Api.Controllers 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)); } @@ -113,8 +113,8 @@ namespace AyaNova.Api.Controllers if (!serverState.IsOpen) 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 - if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.License)) + //NOTE: only bizadmin full and opsadminfull have this right so it's perfect for this task + if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.License)) return StatusCode(403, new ApiNotAuthorizedResponse()); if (!ModelState.IsValid) diff --git a/server/AyaNova/Controllers/NameController.cs b/server/AyaNova/Controllers/NameController.cs index 612a2ad2..848acf35 100644 --- a/server/AyaNova/Controllers/NameController.cs +++ b/server/AyaNova/Controllers/NameController.cs @@ -55,7 +55,7 @@ namespace AyaNova.Api.Controllers if (id == 0) 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))); } diff --git a/server/AyaNova/DataList/AttachmentDataList.cs b/server/AyaNova/DataList/AttachmentDataList.cs index 7176a060..59c4c592 100644 --- a/server/AyaNova/DataList/AttachmentDataList.cs +++ b/server/AyaNova/DataList/AttachmentDataList.cs @@ -41,7 +41,7 @@ namespace AyaNova.DataList FieldKey = "object", UiFieldDataType = (int)UiFieldDataType.Text, SqlIdColumnName = "afileattachment.AttachToObjectid", - SqlValueColumnName = "AYGETNAME(afileattachment.AttachToObjectid, afileattachment.attachtoatype)", + SqlValueColumnName = $"AYGETNAME(afileattachment.AttachToObjectid, afileattachment.attachtoatype,{CurrentUserTranslationId})", SqlATypeColumnName = "afileattachment.attachtoatype", Translate=true }); diff --git a/server/AyaNova/DataList/DataListFactory.cs b/server/AyaNova/DataList/DataListFactory.cs index b33cb52c..726baa69 100644 --- a/server/AyaNova/DataList/DataListFactory.cs +++ b/server/AyaNova/DataList/DataListFactory.cs @@ -9,10 +9,12 @@ namespace AyaNova.DataList //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 //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(); - 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 diff --git a/server/AyaNova/DataList/DataListProcessingBase.cs b/server/AyaNova/DataList/DataListProcessingBase.cs index a15cde87..3d0e5594 100644 --- a/server/AyaNova/DataList/DataListProcessingBase.cs +++ b/server/AyaNova/DataList/DataListProcessingBase.cs @@ -30,7 +30,8 @@ namespace AyaNova.DataList public List FieldDefinitions { get; set; } public AuthorizationRoles AllowedRoles { get; set; } public AyaType DefaultListAType { get; set; } - public long CurrentUserId { get; set; } + //public long CurrentUserId { get; set; } + public long CurrentUserTranslationId { get; set; } public List DefaultColumns { get; set; } public Dictionary DefaultSortBy { get; set; } @@ -133,7 +134,7 @@ namespace AyaNova.DataList //Not Sortable? if (!o.IsSortable) sb.Append($",\"ns\":1"); - + //Not Filterable? if (!o.IsFilterable) sb.Append($",\"nf\":1"); diff --git a/server/AyaNova/DataList/EventDataList.cs b/server/AyaNova/DataList/EventDataList.cs index a4887186..aa161312 100644 --- a/server/AyaNova/DataList/EventDataList.cs +++ b/server/AyaNova/DataList/EventDataList.cs @@ -48,7 +48,7 @@ namespace AyaNova.DataList FieldKey = "object", UiFieldDataType = (int)UiFieldDataType.Text, SqlIdColumnName = "aevent.ayid", - SqlValueColumnName = "AYGETNAME(aevent.ayid, aevent.ayatype)", + SqlValueColumnName = $"AYGETNAME(aevent.ayid, aevent.ayatype,{CurrentUserTranslationId})", SqlATypeColumnName = "aevent.ayatype" }); diff --git a/server/AyaNova/DataList/IDataListProcessing.cs b/server/AyaNova/DataList/IDataListProcessing.cs index 58d4284b..93229d8a 100644 --- a/server/AyaNova/DataList/IDataListProcessing.cs +++ b/server/AyaNova/DataList/IDataListProcessing.cs @@ -17,5 +17,7 @@ namespace AyaNova.DataList Dictionary DefaultSortBy { get; set; } void SetListOptionDefaultsIfNecessary(Models.DataListProcessingBase listOptions); Newtonsoft.Json.Linq.JArray GenerateReturnListColumns(List columns); + + long CurrentUserTranslationId { get; set; } } } \ No newline at end of file diff --git a/server/AyaNova/DataList/PartInventoryTransactionsDataList.cs b/server/AyaNova/DataList/PartInventoryTransactionsDataList.cs index b1ce6131..bc9b7060 100644 --- a/server/AyaNova/DataList/PartInventoryTransactionsDataList.cs +++ b/server/AyaNova/DataList/PartInventoryTransactionsDataList.cs @@ -28,7 +28,7 @@ namespace AyaNova.DataList FieldKey = "PartInventoryTransactionSource", UiFieldDataType = (int)UiFieldDataType.Text, SqlIdColumnName = "apartinventory.sourceid", - SqlValueColumnName = "AYGETNAME(apartinventory.sourceid, apartinventory.sourcetype)", + SqlValueColumnName = $"AYGETNAME(apartinventory.sourceid, apartinventory.sourcetype,{CurrentUserTranslationId})", SqlATypeColumnName = "apartinventory.sourcetype", Translate=true }); diff --git a/server/AyaNova/DataList/ReviewDataList.cs b/server/AyaNova/DataList/ReviewDataList.cs index d6805c23..88e68d01 100644 --- a/server/AyaNova/DataList/ReviewDataList.cs +++ b/server/AyaNova/DataList/ReviewDataList.cs @@ -25,7 +25,7 @@ namespace AyaNova.DataList FieldKey = "Object", UiFieldDataType = (int)UiFieldDataType.Text, SqlIdColumnName = "areview.objectid", - SqlValueColumnName = "AYGETNAME(areview.objectid, areview.aType)", + SqlValueColumnName = $"AYGETNAME(areview.objectid, areview.aType,{CurrentUserTranslationId})", SqlATypeColumnName = "areview.aType", Translate=true }); diff --git a/server/AyaNova/DataList/ServiceBankDataList.cs b/server/AyaNova/DataList/ServiceBankDataList.cs index b2504cfa..ba75b4e8 100644 --- a/server/AyaNova/DataList/ServiceBankDataList.cs +++ b/server/AyaNova/DataList/ServiceBankDataList.cs @@ -26,7 +26,7 @@ // FieldKey = "ServiceBankSourceRootAType", // UiFieldDataType = (int)UiFieldDataType.Text, // SqlIdColumnName = "aservicebank.sourceid", -// SqlValueColumnName = "AYGETNAME(aservicebank.sourceid, aservicebank.sourcetype)", +// SqlValueColumnName = $"AYGETNAME(aservicebank.sourceid, aservicebank.sourcetype,{CurrentUserTranslationId})", // SqlATypeColumnName = "aservicebank.sourcetype" // }); @@ -36,7 +36,7 @@ // FieldKey = "Object", // UiFieldDataType = (int)UiFieldDataType.Text, // SqlIdColumnName = "aservicebank.objectid", -// SqlValueColumnName = "AYGETNAME(aservicebank.objectid, aservicebank.aType)", +// SqlValueColumnName = $"AYGETNAME(aservicebank.objectid, aservicebank.aType,{CurrentUserTranslationId})", // SqlATypeColumnName = "aservicebank.aType" // }); diff --git a/server/AyaNova/biz/BizObjectNameFetcherDirect.cs b/server/AyaNova/biz/BizObjectNameFetcherDirect.cs index 4193f218..d1a48430 100644 --- a/server/AyaNova/biz/BizObjectNameFetcherDirect.cs +++ b/server/AyaNova/biz/BizObjectNameFetcherDirect.cs @@ -7,13 +7,13 @@ namespace AyaNova.Biz //Used by search and eventlog processor 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 { 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()) { if (dr.Read()) @@ -40,12 +40,12 @@ namespace AyaNova.Biz } //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()) { ct.Database.OpenConnection(); - return Name(ayaType, id, command); + return Name(ayaType, id,translationId, command); } } diff --git a/server/AyaNova/biz/CustomerServiceRequestBiz.cs b/server/AyaNova/biz/CustomerServiceRequestBiz.cs index 3923819a..2def248e 100644 --- a/server/AyaNova/biz/CustomerServiceRequestBiz.cs +++ b/server/AyaNova/biz/CustomerServiceRequestBiz.cs @@ -495,7 +495,7 @@ namespace AyaNova.Biz var subs = await ct.NotifySubscription.Where(z => z.EventType == NotifyEventType.CSRAccepted).ToListAsync(); string SourceName = string.Empty; if (subs.Count > 0) - SourceName = BizObjectNameFetcherDirect.Name(BizType, o.Id, ct); + SourceName = BizObjectNameFetcherDirect.Name(BizType, o.Id, UserTranslationId, ct); foreach (var sub in subs) { //not for inactive users @@ -522,7 +522,7 @@ namespace AyaNova.Biz var subs = await ct.NotifySubscription.Where(z => z.EventType == NotifyEventType.CSRRejected).ToListAsync(); string SourceName = string.Empty; if (subs.Count > 0) - SourceName = BizObjectNameFetcherDirect.Name(BizType, o.Id, ct); + SourceName = BizObjectNameFetcherDirect.Name(BizType, o.Id, UserTranslationId, ct); foreach (var sub in subs) { //not for inactive users diff --git a/server/AyaNova/biz/DataListColumnViewBiz.cs b/server/AyaNova/biz/DataListColumnViewBiz.cs index fdc697df..9d971461 100644 --- a/server/AyaNova/biz/DataListColumnViewBiz.cs +++ b/server/AyaNova/biz/DataListColumnViewBiz.cs @@ -113,7 +113,7 @@ namespace AyaNova.Biz var ret = new DataListColumnView(); ret.UserId = UserId; ret.ListKey = listKey; - var dataList = DataListFactory.GetAyaDataList(listKey); + var dataList = DataListFactory.GetAyaDataList(listKey, 0); ret.Columns = JsonConvert.SerializeObject(dataList.DefaultColumns); ret.Sort = JsonConvert.SerializeObject(dataList.DefaultSortBy); return await CreateAsync(ret); diff --git a/server/AyaNova/biz/DataListSavedFilterBiz.cs b/server/AyaNova/biz/DataListSavedFilterBiz.cs index e3254860..26cc1a2b 100644 --- a/server/AyaNova/biz/DataListSavedFilterBiz.cs +++ b/server/AyaNova/biz/DataListSavedFilterBiz.cs @@ -104,7 +104,7 @@ namespace AyaNova.Biz 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(); d.ListKey = listKey; diff --git a/server/AyaNova/biz/EventLogProcessor.cs b/server/AyaNova/biz/EventLogProcessor.cs index 50b374e0..bcdbad72 100644 --- a/server/AyaNova/biz/EventLogProcessor.cs +++ b/server/AyaNova/biz/EventLogProcessor.cs @@ -46,7 +46,7 @@ namespace AyaNova.Biz /// Get the event log for a specified object /// Presentation is the client's responsibility (localization internationalization etc) /// - internal static async Task GetLogForObjectAsync(AyaNova.Api.Controllers.EventLogController.EventLogOptions opt, AyContext ct) + internal static async Task GetLogForObjectAsync(AyaNova.Api.Controllers.EventLogController.EventLogOptions opt, long translationId, AyContext ct) { AyaNova.Api.Controllers.EventLogController.ObjectEventLog ret = new Api.Controllers.EventLogController.ObjectEventLog(); @@ -72,10 +72,10 @@ namespace AyaNova.Biz UserId = z.UserId, Event = z.AyEvent, Textra = z.Textra, - Name = BizObjectNameFetcherDirect.Name(AyaType.User, z.UserId, command) + Name = BizObjectNameFetcherDirect.Name(AyaType.User, z.UserId, translationId, command) }).ToArray(); - ret.Name = BizObjectNameFetcherDirect.Name(opt.AyaType, opt.AyId, command); + ret.Name = BizObjectNameFetcherDirect.Name(opt.AyaType, opt.AyId, translationId, command); return ret; } } @@ -86,7 +86,7 @@ namespace AyaNova.Biz /// Get the event log for a specified User /// Presentation is the client's responsibility (localization internationalization etc) /// - internal static async Task GetLogForUserAsync(AyaNova.Api.Controllers.EventLogController.UserEventLogOptions opt, AyContext ct) + internal static async Task GetLogForUserAsync(AyaNova.Api.Controllers.EventLogController.UserEventLogOptions opt, long translationId, AyContext ct) { AyaNova.Api.Controllers.EventLogController.UserEventLog ret = new Api.Controllers.EventLogController.UserEventLog(); @@ -115,10 +115,10 @@ namespace AyaNova.Biz ObjectId = z.AyId, Event = z.AyEvent, Textra = z.Textra, - Name = BizObjectNameFetcherDirect.Name(z.AyaType, z.AyId, command) + Name = BizObjectNameFetcherDirect.Name(z.AyaType, z.AyId, translationId, command) }).ToArray(); - ret.Name = BizObjectNameFetcherDirect.Name(AyaType.User, opt.UserId, command); + ret.Name = BizObjectNameFetcherDirect.Name(AyaType.User, opt.UserId, translationId, command); return ret; } diff --git a/server/AyaNova/biz/PartInventoryBiz.cs b/server/AyaNova/biz/PartInventoryBiz.cs index 9963a2a2..03a86de2 100644 --- a/server/AyaNova/biz/PartInventoryBiz.cs +++ b/server/AyaNova/biz/PartInventoryBiz.cs @@ -298,7 +298,7 @@ namespace AyaNova.Biz if (o.SourceType != null) o.SourceTypeViz = ayaTypesEnumList.Where(x => x.Id == (long)o.SourceType).Select(x => x.Name).First(); 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); } diff --git a/server/AyaNova/biz/PurchaseOrderBiz.cs b/server/AyaNova/biz/PurchaseOrderBiz.cs index bb3eeff9..46319031 100644 --- a/server/AyaNova/biz/PurchaseOrderBiz.cs +++ b/server/AyaNova/biz/PurchaseOrderBiz.cs @@ -309,7 +309,7 @@ namespace AyaNova.Biz await ValidateCanDeleteAsync(dbObject); if (HasErrors) return false; - { + { var IDList = await ct.Review.AsNoTracking().Where(x => x.AType == AyaType.PurchaseOrder && x.ObjectId == id).Select(x => x.Id).ToListAsync(); if (IDList.Count() > 0) { @@ -957,7 +957,7 @@ namespace AyaNova.Biz AyaType = AyaType.WorkOrderItemPartRequest, ObjectId = (long)proposedRequestItem.WorkOrderItemPartRequestId, 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); log.LogDebug($"Adding NotifyEvent: [{n.ToString()}]"); diff --git a/server/AyaNova/biz/ReviewBiz.cs b/server/AyaNova/biz/ReviewBiz.cs index 8f0747db..423822f0 100644 --- a/server/AyaNova/biz/ReviewBiz.cs +++ b/server/AyaNova/biz/ReviewBiz.cs @@ -166,7 +166,7 @@ namespace AyaNova.Biz } ValidateCanDelete(dbObject); if (HasErrors) - return false; + return false; ct.Review.Remove(dbObject); 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.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:")) { o.ReviewObjectViz = await Translate(o.ReviewObjectViz); diff --git a/server/AyaNova/biz/Search.cs b/server/AyaNova/biz/Search.cs index 84a08e03..4857ec50 100644 --- a/server/AyaNova/biz/Search.cs +++ b/server/AyaNova/biz/Search.cs @@ -197,7 +197,7 @@ namespace AyaNova.Biz { SearchResult SR = new SearchResult(); SR.Name = BizObjectNameFetcherDirect.Name(i.AType, - i.ObjectId, + i.ObjectId,translationId, command); SR.Id = i.ObjectId; SR.Type = i.AType; diff --git a/server/AyaNova/models/DataListSelectedProcessingOptions.cs b/server/AyaNova/models/DataListSelectedProcessingOptions.cs index 7d49c760..3b8f5641 100644 --- a/server/AyaNova/models/DataListSelectedProcessingOptions.cs +++ b/server/AyaNova/models/DataListSelectedProcessingOptions.cs @@ -55,10 +55,10 @@ namespace AyaNova.Models DataListSavedFilterBiz filterbiz = new DataListSavedFilterBiz(ct, userId, userTranslationId, userRoles); SavedFilter = await filterbiz.GetAsync(selectedRequest.FilterId); } - var DataList = DataListFactory.GetAyaDataList(selectedRequest.DataListKey); + var DataList = DataListFactory.GetAyaDataList(selectedRequest.DataListKey, userTranslationId); if (DataList == null) throw new System.ArgumentOutOfRangeException($"DataList \"{selectedRequest.DataListKey}\" specified does not exist"); - + //check rights if (!userRoles.HasAnyFlags(DataList.AllowedRoles)) throw new System.UnauthorizedAccessException($"DataList \"{selectedRequest.DataListKey}\" required Roles not found for this user"); diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index 3038d6f5..8b86dab1 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -33,7 +33,7 @@ namespace AyaNova.Util ///////////////////////////////////////////////////////////////// C1301:I153:CC518:FC193:V11:R2 - + /* @@ -357,74 +357,79 @@ END; $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 aytable TEXT DEFAULT ''; aynamecolumn TEXT DEFAULT 'name'; + aytkey TEXT DEFAULT 'no'; returnstr TEXT DEFAULT ''; -BEGIN +BEGIN case ayatype - when 0 then return 'LT:NoType'; - when 1 then return 'LT:Global'; + when 0 then aytkey= 'NoType'; + when 1 then aytkey= 'Global'; when 2 then return 'FormUserOptions'; when 3 then aytable = 'auser'; - when 4 then return 'LT:ServerState'; - when 5 then return 'LT:License'; - when 6 then return 'LT:LogFile'; - when 7 then return 'LT:PickListTemplate'; + 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 return 'LT:ServerJob'; + when 9 then aytkey= 'ServerJob'; when 10 then aytable = 'acontract'; - when 11 then return 'LT:TrialSeeder'; - when 12 then return 'LT:ServerMetrics'; + when 11 then aytkey= 'TrialSeeder'; + when 12 then aytkey= 'ServerMetrics'; when 13 then aytable = 'atranslation'; - when 14 then return 'LT:UserOptions'; + when 14 then aytkey= 'UserOptions'; when 15 then aytable = 'aheadoffice'; - when 16 then aytable = 'aloanunit'; + 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 return 'LT:PMItem'; - when 23 then return 'LT:WorkOrderItemExpense'; - when 24 then return 'LT:WorkOrderItemLabor'; + 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 return 'LT:QuoteItem'; - when 29 then return 'LT:WorkOrderItemLoan'; - when 30 then return 'LT:WorkOrderItemPart'; + 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 return 'LT:WorkOrderItem'; - when 36 then return 'LT:WorkOrderItemExpense'; - when 37 then return 'LT:WorkOrderItemLabor'; - when 38 then return 'LT:WorkOrderItemLoan'; - when 39 then return 'LT:WorkOrderItemPart'; - when 40 then return 'LT:WorkOrderItemPartRequest'; - when 41 then return 'LT:WorkOrderItemScheduledUser'; - when 42 then return 'LT:WorkOrderItemTask'; - when 43 then return 'LT:WorkOrderItemTravel'; - when 44 then return 'LT:WorkOrderItemUnit'; - when 45 then return 'LT:WorkOrderItemScheduledUser'; - when 46 then return 'LT:WorkOrderItemTask'; - when 47 then return 'LT:GlobalOps'; - when 48 then return 'LT:BizMetrics'; - when 49 then return 'LT:Backup'; + 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 return 'LT:NotifySubscription'; + when 51 then aytkey= 'NotifySubscription'; when 52 then aytable = 'areminder'; - when 53 then return 'LT:UnitMeterReading'; + when 53 then aytkey= 'UnitMeterReading'; when 54 then aytable = 'acustomerservicerequest'; - when 56 then return 'LT:OpsNotificationSettings'; + when 56 then aytkey= 'OpsNotificationSettings'; when 57 then aytable = 'areport'; - when 58 then return 'LT:DashBoardView'; + when 58 then aytkey= 'DashBoardView'; when 59 then aytable = 'acustomernote'; aynamecolumn = 'notedate'; when 60 then aytable = 'amemo'; when 61 then aytable = 'areview'; @@ -437,27 +442,147 @@ BEGIN when 68 then return format('DataListColumnView %L', ayobjectid); when 71 then aytable = 'aworkorderstatus'; when 72 then aytable = 'aTaskGroup'; - when 73 then return 'LT:WorkOrderItemOutsideService'; + when 73 then aytkey= 'WorkOrderItemOutsideService'; when 74 then aytable = 'aWorkOrderItemPriority'; when 75 then aytable = 'aWorkOrderItemStatus'; - when 76 then return 'LT:WorkOrderItemTravel'; - when 77 then return 'LT:WorkOrderItemUnit'; + when 76 then aytkey= 'WorkOrderItemTravel'; + when 77 then aytkey= 'WorkOrderItemUnit'; when 78 then aytable = 'aquotestatus'; - when 79 then return 'LT:WorkOrderItemOutsideService'; - when 80 then return 'LT:WorkOrderItemExpense'; - when 81 then return 'LT:WorkOrderItemLabor'; - when 82 then return 'LT:WorkOrderItemLoan'; - when 83 then return 'LT:WorkOrderItemPart'; - when 84 then return 'LT:WorkOrderItemPartRequest'; - when 85 then return 'LT:WorkOrderItemScheduledUser'; - when 86 then return 'LT:WorkOrderItemTask'; - when 87 then return 'LT:WorkOrderItemTravel'; - when 88 then return 'LT:WorkOrderItemUnit'; - when 89 then return 'LT:WorkOrderItemOutsideService'; + 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; - 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; END; $BODY$ LANGUAGE PLPGSQL STABLE");