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;
}