using System.Collections.Generic; using Newtonsoft.Json.Linq; using Sockeye.Biz; using System.Linq; namespace Sockeye.PickList { internal class CustomerPickList : AyaPickList, IAyaPickListVariant { public CustomerPickList() { DefaultListAType = SockType.Customer; SQLFrom = "from acustomer "; AllowedRoles = BizRoles.GetRoleSet(DefaultListAType).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" }); } public string GetVariantCriteria(string variant) { //Currently the only variant is a object type and id to indicate headoffice //ClientCriteria format for this list is "OBJECTID,AYATYPE" var crit = (variant ?? "").Split(',').Select(z => z.Trim()).ToArray(); if (crit.Length > 1) { int nType = 0; if (!int.TryParse(crit[1], out nType)) return string.Empty; SockType forType = (SockType)nType; if (forType != SockType.HeadOffice) return string.Empty; long lId = 0; if (!long.TryParse(crit[0], out lId)) return string.Empty; if (lId == 0) return string.Empty; //Have valid type, have an id, so filter away switch (forType) { case SockType.HeadOffice: { return $"acustomer.headofficeid = {lId}"; } } } return string.Empty; } }//eoc }//eons