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