From 1a3bdb36c5247be4472c2a74625489625dbcc9e1 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Tue, 15 Dec 2020 19:17:28 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- .../AyaNova/Controllers/PickListController.cs | 5 +++-- server/AyaNova/PickList/IAyaPickList.cs | 2 +- server/AyaNova/PickList/IAyaPickListVariant.cs | 7 +++++++ server/AyaNova/PickList/PickListFetcher.cs | 4 ++-- server/AyaNova/PickList/PickListSqlBuilder.cs | 17 +++++++++++++++-- server/AyaNova/PickList/UserPickList.cs | 14 +++++++++++++- server/AyaNova/biz/PickListBiz.cs | 4 ++-- 8 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 server/AyaNova/PickList/IAyaPickListVariant.cs diff --git a/.vscode/launch.json b/.vscode/launch.json index 8fd97968..0e2049e9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -53,7 +53,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_13\\bin\\" diff --git a/server/AyaNova/Controllers/PickListController.cs b/server/AyaNova/Controllers/PickListController.cs index a12990e3..9a7a03e6 100644 --- a/server/AyaNova/Controllers/PickListController.cs +++ b/server/AyaNova/Controllers/PickListController.cs @@ -56,9 +56,10 @@ namespace AyaNova.Api.Controllers /// So a tag query might be entered as "..zon some" which would match all tags LIKE 'zon' and template fields LIKE 'some' /// Include inactive objects in the returned list /// Return only one item (for pre-selected items on forms) + /// Some lists optionally take a variant string, e.g. User type "inside","outside" etc /// Filtered list [HttpGet("list")] - public async Task GetList([FromQuery]AyaType ayaType, [FromQuery]string query, [FromQuery] bool inactive, [FromQuery]long? preId) + public async Task GetList([FromQuery] AyaType ayaType, [FromQuery] string query, [FromQuery] bool inactive, [FromQuery] long? preId, [FromQuery] string variant) { if (serverState.IsClosed) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); @@ -83,7 +84,7 @@ namespace AyaNova.Api.Controllers if (preId == null) preId = 0; - var o = await biz.GetPickListAsync(PickList, query, inactive, (long)preId, log); + var o = await biz.GetPickListAsync(PickList, query, inactive, (long)preId, variant, log); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else diff --git a/server/AyaNova/PickList/IAyaPickList.cs b/server/AyaNova/PickList/IAyaPickList.cs index ad809826..1e29d732 100644 --- a/server/AyaNova/PickList/IAyaPickList.cs +++ b/server/AyaNova/PickList/IAyaPickList.cs @@ -15,6 +15,6 @@ namespace AyaNova.PickList AyaType DefaultListObjectType { get; set; } //Default / STOCK DataListView when none is specified string DefaultTemplate { get; set; } - List GetFieldListFromTemplate(JArray listViewArray); + List GetFieldListFromTemplate(JArray listViewArray); } } \ No newline at end of file diff --git a/server/AyaNova/PickList/IAyaPickListVariant.cs b/server/AyaNova/PickList/IAyaPickListVariant.cs new file mode 100644 index 00000000..6e726101 --- /dev/null +++ b/server/AyaNova/PickList/IAyaPickListVariant.cs @@ -0,0 +1,7 @@ +namespace AyaNova.PickList +{ + internal interface IAyaPickListVariant + { + string GetVariantCriteria(string variant); + } +} \ No newline at end of file diff --git a/server/AyaNova/PickList/PickListFetcher.cs b/server/AyaNova/PickList/PickListFetcher.cs index 579aed17..1860d890 100644 --- a/server/AyaNova/PickList/PickListFetcher.cs +++ b/server/AyaNova/PickList/PickListFetcher.cs @@ -11,7 +11,7 @@ namespace AyaNova.PickList internal static class PickListFetcher { internal static async Task> GetResponseAsync(IAyaPickList PickList, string autoCompleteQuery, - string tagSpecificQuery, bool includeInactive, long preId, AyContext ct, ILogger log) + string tagSpecificQuery, bool includeInactive, long preId, string variant, AyContext ct, ILogger log) { //Sort out effective Template @@ -34,7 +34,7 @@ namespace AyaNova.PickList List TemplateColumnNames = PickList.GetFieldListFromTemplate(jTemplate); //BUILD THE QUERY - var q = PickListSqlBuilder.Build(PickList, TemplateColumnNames, autoCompleteQuery, tagSpecificQuery, includeInactive, preId); + var q = PickListSqlBuilder.Build(PickList, TemplateColumnNames, autoCompleteQuery, tagSpecificQuery, includeInactive, preId, variant); //RETURN OBJECTS var ret = new List(); diff --git a/server/AyaNova/PickList/PickListSqlBuilder.cs b/server/AyaNova/PickList/PickListSqlBuilder.cs index c34a715b..5e833dae 100644 --- a/server/AyaNova/PickList/PickListSqlBuilder.cs +++ b/server/AyaNova/PickList/PickListSqlBuilder.cs @@ -25,7 +25,7 @@ namespace AyaNova.PickList const int MAXIMUM_RESULT_COUNT = 100; //Build the query for a picklist request - internal static string Build(IAyaPickList pickList, List templateColumnNames, string autoCompleteQuery, string tagSpecificQuery, bool IncludeInactive, long preId) + internal static string Build(IAyaPickList pickList, List templateColumnNames, string autoCompleteQuery, string tagSpecificQuery, bool IncludeInactive, long preId, string variant) { //determine this in advance as it will be used in a loop later @@ -44,6 +44,14 @@ namespace AyaNova.PickList string TagSpecificWhereFragment = string.Empty; string PredefinedOnlyWhereFragment = string.Empty; + string VariantWhereFragment = string.Empty; + bool HasVariantWhereFragment = false; + if (!string.IsNullOrWhiteSpace(variant) && pickList is IAyaPickListVariant) + { + VariantWhereFragment = ((IAyaPickListVariant)pickList).GetVariantCriteria(variant); + HasVariantWhereFragment = !string.IsNullOrWhiteSpace(VariantWhereFragment); + } + //PROCESS ROW ID "VALUE" COLUMN // AyaPickListFieldDefinition rowIdColumn = pickList.ColumnDefinitions.FirstOrDefault(z => z.IsRowId == true); @@ -230,10 +238,15 @@ namespace AyaNova.PickList //WHERE //there is a condition where there is no where (inactive=true and no query of any kind) - if (preId > 0 || lWhere.Count > 0 || HasTagSpecificQuery || IncludeInactive == false) + if (preId > 0 || lWhere.Count > 0 || HasTagSpecificQuery || HasVariantWhereFragment || IncludeInactive == false) { sb.Append(" where "); + if (HasVariantWhereFragment) + { + sb.Append($"({VariantWhereFragment}) and "); + } + if (HasTagSpecificQuery) { sb.Append(TagSpecificWhereFragment); diff --git a/server/AyaNova/PickList/UserPickList.cs b/server/AyaNova/PickList/UserPickList.cs index 6a07cc1d..1c2511d0 100644 --- a/server/AyaNova/PickList/UserPickList.cs +++ b/server/AyaNova/PickList/UserPickList.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json.Linq; using AyaNova.Biz; namespace AyaNova.PickList { - internal class UserPickList : AyaPickList + internal class UserPickList : AyaPickList, IAyaPickListVariant { public UserPickList() { @@ -62,5 +62,17 @@ namespace AyaNova.PickList SqlValueColumnName = "auser.tags" }); } + + public string GetVariantCriteria(string variant) + { + switch (variant) + { + case "inside": + return $"auser.usertype!={(int)UserType.Customer} and auser.usertype!={(int)UserType.HeadOffice}"; + case "outside": + return $"auser.usertype={(int)UserType.Customer} or auser.usertype={(int)UserType.HeadOffice}"; + } + return string.Empty; + } }//eoc }//eons \ No newline at end of file diff --git a/server/AyaNova/biz/PickListBiz.cs b/server/AyaNova/biz/PickListBiz.cs index abb2bc7f..123badaa 100644 --- a/server/AyaNova/biz/PickListBiz.cs +++ b/server/AyaNova/biz/PickListBiz.cs @@ -70,7 +70,7 @@ namespace AyaNova.Biz //get picklist - internal async Task> GetPickListAsync(IAyaPickList PickList, string query, bool inactive, long preId, ILogger log) + internal async Task> GetPickListAsync(IAyaPickList PickList, string query, bool inactive, long preId, string variant, ILogger log) { //Crack and validate the query part set a broken rule if not valid and return null @@ -134,7 +134,7 @@ namespace AyaNova.Biz } //Autocomplete and tagonly query terms now set for consumption by PickListFetcher, ready to fetch... - List items = await PickListFetcher.GetResponseAsync(PickList, AutoCompleteQuery, TagSpecificQuery, inactive, preId, ct, log); + List items = await PickListFetcher.GetResponseAsync(PickList, AutoCompleteQuery, TagSpecificQuery, inactive, preId,variant, ct, log); return items; }