diff --git a/server/AyaNova/Controllers/UserController.cs b/server/AyaNova/Controllers/UserController.cs index c422c9db..5b351ffc 100644 --- a/server/AyaNova/Controllers/UserController.cs +++ b/server/AyaNova/Controllers/UserController.cs @@ -319,6 +319,33 @@ namespace AyaNova.Api.Controllers return Ok(ApiOkResponse.Response(ret)); } + /// + /// Get list of Customer Contact Users + /// (Rights to Customer object required) + /// + /// Customer contact users + [HttpGet("customer-contacts/{customerId}")] + public async Task GetClientContactList(long customerId) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + + if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.Customer)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + + var ret = await ct.User.Where(z => z.UserType == UserType.Customer && z.CustomerId==customerId).Select(z => new dtUser + { + Id = z.Id, + Active = z.Active, + Name = z.Name, + UserType = z.UserType, + LastLogin = z.LastLogin + + }).ToListAsync(); + return Ok(ApiOkResponse.Response(ret)); + } + + /// /// Fetch user type (inside meaning staff or subcontractor or outside meaning customer or headoffice type user) diff --git a/server/AyaNova/PickList/CustomerPickList.cs b/server/AyaNova/PickList/CustomerPickList.cs new file mode 100644 index 00000000..97a96abc --- /dev/null +++ b/server/AyaNova/PickList/CustomerPickList.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using Newtonsoft.Json.Linq; +using AyaNova.Biz; +namespace AyaNova.PickList +{ + internal class CustomerPickList : AyaPickList + { + public CustomerPickList() + { + + DefaultListObjectType = AyaType.Customer; + SQLFrom = "from acustomer"; + AllowedRoles = BizRoles.GetRoleSet(DefaultListObjectType).Select; + dynamic dTemplate = new JArray(); + + dynamic cm = new JObject(); + cm.fld = "customername"; + dTemplate.Add(cm); + + cm = new JObject(); + cm.fld = "customertags"; + dTemplate.Add(cm); + + base.DefaultTemplate = dTemplate.ToString(Newtonsoft.Json.Formatting.None); + + //NOTE: Due to the join, all the sql id and name fields that can conflict with the joined table need to be specified completely + ColumnDefinitions = new List(); + ColumnDefinitions.Add(new AyaPickListFieldDefinition + { + TKey = "Active", + FieldKey = "customeractive", + ColumnDataType = UiFieldDataType.Bool, + SqlValueColumnName = "acustomer.active", + IsActiveColumn = true + }); + ColumnDefinitions.Add(new AyaPickListFieldDefinition + { + TKey = "Name", + FieldKey = "customername", + ColumnDataType = UiFieldDataType.Text, + SqlIdColumnName = "acustomer.id", + SqlValueColumnName = "acustomer.name", + IsRowId = true + }); + + ColumnDefinitions.Add(new AyaPickListFieldDefinition + { + TKey = "Tags", + FieldKey = "customertags", + ColumnDataType = UiFieldDataType.Tags, + SqlValueColumnName = "acustomer.tags" + }); + + } + }//eoc +}//eons \ No newline at end of file diff --git a/server/AyaNova/PickList/PickListFactory.cs b/server/AyaNova/PickList/PickListFactory.cs index 58928710..8b7ea491 100644 --- a/server/AyaNova/PickList/PickListFactory.cs +++ b/server/AyaNova/PickList/PickListFactory.cs @@ -16,6 +16,8 @@ namespace AyaNova.PickList //CoreBizObject add here case AyaType.Contract: return new ContractPickList() as IAyaPickList; + case AyaType.Customer: + return new CustomerPickList() as IAyaPickList; case AyaType.HeadOffice: return new HeadOfficePickList() as IAyaPickList; case AyaType.Widget: