diff --git a/server/AyaNova/Controllers/TagPickListController.cs b/server/AyaNova/Controllers/TagPickListController.cs
new file mode 100644
index 00000000..928f033c
--- /dev/null
+++ b/server/AyaNova/Controllers/TagPickListController.cs
@@ -0,0 +1,88 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Routing;
+using Microsoft.Extensions.Logging;
+using AyaNova.Models;
+using AyaNova.Api.ControllerHelpers;
+using AyaNova.Biz;
+
+
+namespace AyaNova.Api.Controllers
+{
+
+ ///
+ /// Enum pick list controller
+ ///
+ [ApiVersion("8.0")]
+ [Route("api/v{version:apiVersion}/[controller]")]
+ [Produces("application/json")]
+ public class TagPickListController : Controller
+ {
+ private readonly AyContext ct;
+ private readonly ILogger log;
+ private readonly ApiServerState serverState;
+
+
+ ///
+ /// ctor
+ ///
+ ///
+ ///
+ ///
+ public TagPickListController(AyContext dbcontext, ILogger logger, ApiServerState apiServerState)
+ {
+ ct = dbcontext;
+ log = logger;
+ serverState = apiServerState;
+ }
+
+
+ ///
+ /// Get tag picklist
+ ///
+ /// Required roles: Any
+ ///
+ /// The query to filter the returned list by
+ /// List
+ [HttpGet("list/{query}")]
+ public ActionResult GetPickList([FromRoute]string query)
+ {
+ if (!serverState.IsOpen)
+ {
+ return StatusCode(503, new ApiErrorResponse(ApiErrorCode.API_CLOSED, null, serverState.Reason));
+ }
+
+ return Ok(new ApiOkResponse(TagUtil.PickListFiltered(ct,query)));
+ }
+
+
+
+
+ // ///
+ // /// Get all possible enumerated values picklist key names
+ // ///
+ // /// Required roles: Any
+ // ///
+ // /// List of AyaNova enumerated type list key names that can be fetched from the AyaEnumPickList/GetPickListRoute
+ // [HttpGet("listkeys")]
+ // public ActionResult GetTypesList()
+ // {
+ // if (!serverState.IsOpen)
+ // {
+ // return StatusCode(503, new ApiErrorResponse(ApiErrorCode.API_CLOSED, null, serverState.Reason));
+ // }
+
+ // List> ret = new List>();
+ // ret.Add(new KeyValuePair("usertypes", "AyaNova user account types"));
+ // ret.Add(new KeyValuePair("authorizationroles", "AyaNova user account role types"));
+ // ret.Add(new KeyValuePair("AyaType", "All AyaNova object types, use the AyaTypeController route to fetch these"));
+
+ // return Ok(new ApiOkResponse(ret));
+ // }
+
+
+
+
+ }//eoc
+}//ens
\ No newline at end of file
diff --git a/server/AyaNova/biz/TagUtil.cs b/server/AyaNova/biz/TagUtil.cs
index c54ef4ce..c4eb8305 100644
--- a/server/AyaNova/biz/TagUtil.cs
+++ b/server/AyaNova/biz/TagUtil.cs
@@ -70,7 +70,7 @@ namespace AyaNova.Biz
//Decrement the refcount
ExistingTag.RefCount -= 1;
}
-
+
try
{
ct.SaveChanges();
@@ -148,186 +148,14 @@ namespace AyaNova.Biz
}
- /*
-
-
- /////////////////////////////////////////////////////////////////////
- /// IMPORT v7 implementation
- public async Task ImportV7Async(JObject j, List importMap, Guid jobId)
+
+ //Pick list for driving pick list route
+ //going with contains for now as I think it's more useful in the long run and still captures startswith intent by user
+ public static List PickListFiltered(AyContext ct, string q)
{
- //NO TASK TYPE, IT'S ALL THE SAME, KEEPING THIS FOR POSSIBLE FUTURE PURPOSES LIKE APPENDING OBJECT TYPE OR SOMETHING
- string SourceType = j["V7_TYPE"].Value();
- switch (SourceType)
- {
- case "GZTW.AyaNova.BLL.Region":
- case "GZTW.AyaNova.BLL.UnitModelCategory":
- case "GZTW.AyaNova.BLL.UnitServiceType":
- case "GZTW.AyaNova.BLL.WorkorderItemType":
- case "GZTW.AyaNova.BLL.ClientGroup":
- case "GZTW.AyaNova.BLL.WorkorderCategory":
- case "GZTW.AyaNova.BLL.PartCategory":
- case "GZTW.AyaNova.BLL.DispatchZone":
- case "GZTW.AyaNova.BLL.ScheduleableUserGroup":
- {
- switch (j["IMPORT_TASK"].Value())
- {
- case "main":
- {
- #region main import task
- var NewTagName = j["Name"].Value();
-
- var ShortTypeName = string.Empty;
- switch (SourceType)
- {
- case "GZTW.AyaNova.BLL.Region":
- ShortTypeName = "rgn";
- break;
- case "GZTW.AyaNova.BLL.UnitModelCategory":
- ShortTypeName = "unitmdlctgry";
- break;
- case "GZTW.AyaNova.BLL.UnitServiceType":
- ShortTypeName = "unitsvtyp";
- break;
- case "GZTW.AyaNova.BLL.WorkorderItemType":
- ShortTypeName = "woitemtyp";
- break;
- case "GZTW.AyaNova.BLL.ClientGroup":
- ShortTypeName = "clntgrp";
- break;
- case "GZTW.AyaNova.BLL.WorkorderCategory":
- ShortTypeName = "woctgry";
- break;
- case "GZTW.AyaNova.BLL.PartCategory":
- ShortTypeName = "prtctgry";
- break;
- case "GZTW.AyaNova.BLL.DispatchZone":
- ShortTypeName = "dspchzn";
- break;
- case "GZTW.AyaNova.BLL.ScheduleableUserGroup":
- ShortTypeName = "schdusrgrp";
- break;
- }
-
-
- NewTagName += "." + ShortTypeName;
- var OldV7Id = new Guid(j["ID"].Value());
-
- //Ensure it follows the rules
- NewTagName = CleanTagName(NewTagName);
-
- //There might already be a tag of the same name since so many different types of V7 objects are becoming tags
- //Weighed the pros and cons of uniquifying by object type versus just using the same name for different object types:
- //it seems to me at this point that people might desire the same exact name because if they used it that way they probably
- //intended it that way, so decision is to check if it already exists and then use that ID in the importMap instead
- //for matching other objects imported to tags
-
- //Already present?
- var ExistingTag = ct.Tag.Where(m => m.Name == NewTagName).FirstOrDefault();
- if (ExistingTag != null)
- {
- //map it to the existing tag of same name
- var mapItem = new ImportAyaNova7MapItem(OldV7Id, AyaType.Tag, ExistingTag.Id);
- }
- else
- {
-
- Tag o = await CreateAsync(NewTagName);
- if (HasErrors)
- {
- //If there are any validation errors, log in joblog and move on
- JobsBiz.LogJob(jobId, $"TagBiz::ImportV7Async -> import object \"{NewTagName}\" of type \"{SourceType}\" source id {OldV7Id.ToString()} failed validation and was not imported: {GetErrorsAsString()} ", ct);
- return false;
- }
- else
- {
- await ct.SaveChangesAsync();
- var mapItem = new ImportAyaNova7MapItem(OldV7Id, AyaType.Tag, o.Id);
- importMap.Add(mapItem);
- ImportAyaNova7Biz.LogEventCreatedModifiedEvents(j, importMap, AyaType.Tag, ct);
- }
- }
- #endregion
- }
- break;
- case "scheduleableusergrouptags":
- {
- #region attribute sched user group tags
- //
- // {
- // "ID": "871e77b2-979a-4f26-930b-46f7c05fc19f",
- // "Created": "08/30/2018 08:12 AM",
- // "Modified": "08/30/2018 08:13 AM",
- // "Creator": "2ecc77fc-69e2-4a7e-b88d-bd0ecaf36aed",
- // "Modifier": "2ecc77fc-69e2-4a7e-b88d-bd0ecaf36aed",
- // "Name": "Yet another test group",
- // "Active": true,
- // "Description": "More testing yay!",
- // "ScheduleableUsers": [
- // {
- // "Created": "08/30/2018 08:13 AM",
- // "Creator": "2ecc77fc-69e2-4a7e-b88d-bd0ecaf36aed",
- // "Modified": "08/30/2018 08:13 AM",
- // "Modifier": "2ecc77fc-69e2-4a7e-b88d-bd0ecaf36aed",
- // "ID": "676475be-8301-47d0-bd54-af9dbd1fe7eb",
- // "ScheduleableUserID": "1d859264-3f32-462a-9b0c-a67dddfdf4d3",
- // "ScheduleableUserGroupID": "871e77b2-979a-4f26-930b-46f7c05fc19f"
- // },
- // {
- // "Created": "08/30/2018 08:13 AM",
- // "Creator": "2ecc77fc-69e2-4a7e-b88d-bd0ecaf36aed",
- // "Modified": "08/30/2018 08:13 AM",
- // "Modifier": "2ecc77fc-69e2-4a7e-b88d-bd0ecaf36aed",
- // "ID": "173499c3-a616-42a0-b08c-74008f8fa352",
- // "ScheduleableUserID": "42b282bb-100b-4b31-aa14-5c831d7cda66",
- // "ScheduleableUserGroupID": "871e77b2-979a-4f26-930b-46f7c05fc19f"
- // },
- // {
- // "Created": "08/30/2018 08:13 AM",
- // "Creator": "2ecc77fc-69e2-4a7e-b88d-bd0ecaf36aed",
- // "Modified": "08/30/2018 08:13 AM",
- // "Modifier": "2ecc77fc-69e2-4a7e-b88d-bd0ecaf36aed",
- // "ID": "19c9b3d6-eeb2-44ac-be4e-6ec93d15b02a",
- // "ScheduleableUserID": "e6ff9bc6-a550-4242-8c41-857f740e2841",
- // "ScheduleableUserGroupID": "871e77b2-979a-4f26-930b-46f7c05fc19f"
- // }
- // ]
- // }
- //
- var V7Id = new Guid(j["ID"].Value());
- var RavenTagId = importMap.Where(m => m.V7ObjectId == V7Id).First().NewObjectAyaTypeId.ObjectId;
-
- foreach (JToken t in j["ScheduleableUsers"])
- {
- var techId = new Guid(t["ScheduleableUserID"].Value());
- var RavenUserId = importMap.Where(m => m.V7ObjectId == techId).First().NewObjectAyaTypeId.ObjectId;
- var Creator = importMap.Where(m => m.V7ObjectId == new Guid(t["Creator"].Value())).First().NewObjectAyaTypeId.ObjectId;
-
- TagMap tm = new TagMap();
- tm.TagToObjectId = RavenUserId;
- tm.TagToObjectType = AyaType.User;
- tm.TagId = RavenTagId;
- tm.OwnerId = Creator;
- ct.TagMap.Add(tm);
- }
- ct.SaveChanges();
-
- #endregion
- }
- break;
- }
-
- }
- break;
-
-
- }
-
- //this is the equivalent of returning void for a Task signature with nothing to return
- return true;
+ q = NormalizeTag(q);
+ return ct.Tag.Where(x => x.Name.Contains(q)).OrderBy(x => x.Name).Select(x => x.Name).ToList();
}
-
-
- */
}//eoc