diff --git a/server/AyaNova/Controllers/PickListController.cs b/server/AyaNova/Controllers/PickListController.cs index a6d4dca9..153fc4ff 100644 --- a/server/AyaNova/Controllers/PickListController.cs +++ b/server/AyaNova/Controllers/PickListController.cs @@ -84,6 +84,32 @@ namespace AyaNova.Api.Controllers return Ok(ApiOkResponse.Response(o)); } + /// + /// Get a single item's name display in PickList templated format + /// + /// + /// One display string or an empty string if not found or invalid + [HttpPost("single")] + public async Task PostSingle([FromBody] PickListSingleOptions pickListSingleParams) + { + if (serverState.IsClosed) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + + if (!Authorized.HasSelectRole(HttpContext.Items, pickListSingleParams.AyaType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + + //Instantiate the business object handler + PickListBiz biz = PickListBiz.GetBiz(ct, HttpContext); + + var o = await biz.GetTemplatedNameAsync(pickListSingleParams.AyaType, pickListSingleParams.Id, pickListSingleParams.ListVariant, log); + if (o == null) + return BadRequest(new ApiErrorResponse(biz.Errors)); + else + return Ok(ApiOkResponse.Response(o)); + } /// diff --git a/server/AyaNova/PickList/PickListOptions.cs b/server/AyaNova/PickList/PickListOptions.cs index 424d69da..45aea84b 100644 --- a/server/AyaNova/PickList/PickListOptions.cs +++ b/server/AyaNova/PickList/PickListOptions.cs @@ -42,4 +42,24 @@ namespace AyaNova.PickList } } + public sealed class PickListSingleOptions + { + + [FromBody] + public AyaType AyaType { get; set; } + + [FromBody] + public long Id { get; set; } + + [FromBody] + public string ListVariant { get; set; } + + public PickListSingleOptions() + { + AyaType = AyaType.NoType; + Id = 0; + ListVariant = string.Empty; + } + } + } \ No newline at end of file diff --git a/server/AyaNova/biz/PickListBiz.cs b/server/AyaNova/biz/PickListBiz.cs index 41be2933..3311ab93 100644 --- a/server/AyaNova/biz/PickListBiz.cs +++ b/server/AyaNova/biz/PickListBiz.cs @@ -134,11 +134,27 @@ 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, preIds,variant, ct, log); + List items = await PickListFetcher.GetResponseAsync(PickList, AutoCompleteQuery, TagSpecificQuery, inactive, preIds, variant, ct, log); return items; } + //get picklist display for a single item + //used to populate UI with picklist format display for items + internal async Task GetTemplatedNameAsync(AyaType ayaType, long id, string variant, ILogger log) + { + long[] preIds = { id }; + var PickList = PickListFactory.GetAyaPickList(ayaType); + //Autocomplete and tagonly query terms now set for consumption by PickListFetcher, ready to fetch... + List items = await PickListFetcher.GetResponseAsync(PickList, null, null, true, preIds, variant, ct, log); + if (items.Count == 0) + { + return string.Empty; + } + return items[0].Name; + } + + //get picklist templates, basically all the object types that support picklists internal List GetListOfAllPickListTypes(long translationId) { @@ -146,8 +162,6 @@ namespace AyaNova.Biz } - - //////////////////////////////////////////////////////////////////////////////////////////////// //UPDATE // @@ -171,7 +185,7 @@ namespace AyaNova.Biz return false; if (bAdd) await ct.PickListTemplate.AddAsync(o); - + await ct.SaveChangesAsync(); //Log modification and save context diff --git a/server/AyaNova/biz/PurchaseOrderBiz.cs b/server/AyaNova/biz/PurchaseOrderBiz.cs index 4f23b9ad..680a1c79 100644 --- a/server/AyaNova/biz/PurchaseOrderBiz.cs +++ b/server/AyaNova/biz/PurchaseOrderBiz.cs @@ -105,6 +105,12 @@ namespace AyaNova.Biz internal async Task GetAsync(long id, bool logTheGetEvent = true) { var ret = await ct.PurchaseOrder.Include(z => z.Items).AsNoTracking().SingleOrDefaultAsync(z => z.Id == id); + + //populate names for client ui + var pl= new PickListBiz(ct,UserId,UserTranslationId,CurrentUserRoles); + foreach(PurchaseOrderItem item in ret.Items){ + item.PartName= await pl.GetPickListAsync() + } if (logTheGetEvent && ret != null) await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct); return ret; diff --git a/server/AyaNova/models/PurchaseOrderItem.cs b/server/AyaNova/models/PurchaseOrderItem.cs index ca95962c..c843bf95 100644 --- a/server/AyaNova/models/PurchaseOrderItem.cs +++ b/server/AyaNova/models/PurchaseOrderItem.cs @@ -1,7 +1,7 @@ using System; using System.ComponentModel.DataAnnotations; using Newtonsoft.Json; - +using System.ComponentModel.DataAnnotations.Schema; namespace AyaNova.Models { @@ -30,6 +30,9 @@ namespace AyaNova.Models public long? PurchaseTaxCodeId { get; set; } public string VendorPartNumber { get; set; } + //mirror name fields to save a roundtrip to the UI, not persisted + [NotMapped] + public string PartName { get; set; } [JsonIgnore] public PurchaseOrder PurchaseOrder { get; set; }