This commit is contained in:
88
server/AyaNova/Controllers/TagPickListController.cs
Normal file
88
server/AyaNova/Controllers/TagPickListController.cs
Normal file
@@ -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
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Enum pick list controller
|
||||
/// </summary>
|
||||
[ApiVersion("8.0")]
|
||||
[Route("api/v{version:apiVersion}/[controller]")]
|
||||
[Produces("application/json")]
|
||||
public class TagPickListController : Controller
|
||||
{
|
||||
private readonly AyContext ct;
|
||||
private readonly ILogger<AyaTypeController> log;
|
||||
private readonly ApiServerState serverState;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// ctor
|
||||
/// </summary>
|
||||
/// <param name="dbcontext"></param>
|
||||
/// <param name="logger"></param>
|
||||
/// <param name="apiServerState"></param>
|
||||
public TagPickListController(AyContext dbcontext, ILogger<AyaTypeController> logger, ApiServerState apiServerState)
|
||||
{
|
||||
ct = dbcontext;
|
||||
log = logger;
|
||||
serverState = apiServerState;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get tag picklist
|
||||
///
|
||||
/// Required roles: Any
|
||||
/// </summary>
|
||||
/// <param name="query">The query to filter the returned list by</param>
|
||||
/// <returns>List</returns>
|
||||
[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)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// /// <summary>
|
||||
// /// Get all possible enumerated values picklist key names
|
||||
// ///
|
||||
// /// Required roles: Any
|
||||
// /// </summary>
|
||||
// /// <returns>List of AyaNova enumerated type list key names that can be fetched from the AyaEnumPickList/GetPickListRoute</returns>
|
||||
// [HttpGet("listkeys")]
|
||||
// public ActionResult GetTypesList()
|
||||
// {
|
||||
// if (!serverState.IsOpen)
|
||||
// {
|
||||
// return StatusCode(503, new ApiErrorResponse(ApiErrorCode.API_CLOSED, null, serverState.Reason));
|
||||
// }
|
||||
|
||||
// List<KeyValuePair<string, string>> ret = new List<KeyValuePair<string, string>>();
|
||||
// ret.Add(new KeyValuePair<string, string>("usertypes", "AyaNova user account types"));
|
||||
// ret.Add(new KeyValuePair<string, string>("authorizationroles", "AyaNova user account role types"));
|
||||
// ret.Add(new KeyValuePair<string, string>("AyaType", "All AyaNova object types, use the AyaTypeController route to fetch these"));
|
||||
|
||||
// return Ok(new ApiOkResponse(ret));
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
}//eoc
|
||||
}//ens
|
||||
@@ -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<bool> ImportV7Async(JObject j, List<ImportAyaNova7MapItem> 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<string> 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<string>();
|
||||
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<string>())
|
||||
{
|
||||
case "main":
|
||||
{
|
||||
#region main import task
|
||||
var NewTagName = j["Name"].Value<string>();
|
||||
|
||||
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<string>());
|
||||
|
||||
//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<string>());
|
||||
var RavenTagId = importMap.Where(m => m.V7ObjectId == V7Id).First().NewObjectAyaTypeId.ObjectId;
|
||||
|
||||
foreach (JToken t in j["ScheduleableUsers"])
|
||||
{
|
||||
var techId = new Guid(t["ScheduleableUserID"].Value<String>());
|
||||
var RavenUserId = importMap.Where(m => m.V7ObjectId == techId).First().NewObjectAyaTypeId.ObjectId;
|
||||
var Creator = importMap.Where(m => m.V7ObjectId == new Guid(t["Creator"].Value<string>())).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
|
||||
|
||||
Reference in New Issue
Block a user