diff --git a/server/AyaNova/Controllers/DataListController.cs b/server/AyaNova/Controllers/DataListController.cs index 07f3921d..073e9d8c 100644 --- a/server/AyaNova/Controllers/DataListController.cs +++ b/server/AyaNova/Controllers/DataListController.cs @@ -7,6 +7,7 @@ using AyaNova.Api.ControllerHelpers; using AyaNova.Biz; using AyaNova.DataList; using System.Threading.Tasks; +using System.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -117,7 +118,8 @@ namespace AyaNova.Api.Controllers return BadRequest(new ApiErrorResponse(ApiErrorCode.NOT_FOUND, null, $"DataList \"{DataListKey}\" specified does not exist")); } - return Ok(ApiOkResponse.Response(DataList.FieldDefinitions)); + var ExternalOnly = DataList.FieldDefinitions.Where(z => z.IsMeta == false); + return Ok(ApiOkResponse.Response(ExternalOnly)); } }//eoc diff --git a/server/AyaNova/DataList/AyaDataListFieldDefinition.cs b/server/AyaNova/DataList/AyaDataListFieldDefinition.cs index 7d67a3c1..5cf8371d 100644 --- a/server/AyaNova/DataList/AyaDataListFieldDefinition.cs +++ b/server/AyaNova/DataList/AyaDataListFieldDefinition.cs @@ -24,6 +24,9 @@ namespace AyaNova.DataList //CLIENT / SERVER - client display server validation purposes public bool IsSortable { get; set; } + //CLIENT / SERVER - indicates internal only meta column, don't show to user for filter settings etc + public bool IsMeta { get; set; } + //CLIENT Use only for display public int UiFieldDataType { get; set; } @@ -56,6 +59,7 @@ namespace AyaNova.DataList IsFilterable = true; IsSortable = true; IsRowId = false; + IsMeta=false; //Set openable object type to no type which is the default and means it's not a link to another object AyaObjectType = (int)AyaType.NoType; diff --git a/server/AyaNova/DataList/CustomerNoteDataList.cs b/server/AyaNova/DataList/CustomerNoteDataList.cs index accf798b..b4d8c55a 100644 --- a/server/AyaNova/DataList/CustomerNoteDataList.cs +++ b/server/AyaNova/DataList/CustomerNoteDataList.cs @@ -42,7 +42,7 @@ namespace AyaNova.DataList UiFieldDataType = (int)UiFieldDataType.Text, SqlIdColumnName = "auser.id", SqlValueColumnName = "auser.name", - IsRowId = true + IsRowId = false }); @@ -64,6 +64,15 @@ namespace AyaNova.DataList UiFieldDataType = (int)UiFieldDataType.DateTime, SqlValueColumnName = "acustomernote.notedate" }); + + //META column + FieldDefinitions.Add(new AyaDataListFieldDefinition + { + FieldKey = "metacustomer", + SqlIdColumnName = "acustomernote.customerid", + SqlValueColumnName = "acustomernote.customerid", + IsMeta = true + }); } }//eoc }//eons \ No newline at end of file diff --git a/server/AyaNova/DataList/DataListFetcher.cs b/server/AyaNova/DataList/DataListFetcher.cs index 9fd2545e..ee2fcff1 100644 --- a/server/AyaNova/DataList/DataListFetcher.cs +++ b/server/AyaNova/DataList/DataListFetcher.cs @@ -35,16 +35,27 @@ namespace AyaNova.DataList listOptions.ListView = DataList.DefaultListView; } - //parse the list view - var ListViewArray = JArray.Parse(listOptions.ListView); + //parse the list view(s) + //This one is for the return list to the Client for grid column display + var PublicListViewArray = JArray.Parse(listOptions.ListView); + + //this one is for internal use here to build the filter and sort etc + var InternalListViewArray = JArray.Parse(listOptions.ListView); + var MetaListViewArray = JArray.Parse(listOptions.MetaView ?? "[]"); + foreach (JToken jt in MetaListViewArray) + InternalListViewArray.Add(jt); - //Get the field key names in a list from the listview - List ListViewFieldList = DataList.GetFieldListFromListView(ListViewArray); + //Get the public field key names in a list from the listview + List PublicListViewFieldList = DataList.GetFieldListFromListView(PublicListViewArray); + + //Get the internal only field key names from the internal list view + List InternalListViewFieldList = DataList.GetFieldListFromListView(InternalListViewArray); + //BUILD THE QUERY //SELECT FRAGMENT COLUMNS FROM TEMPLATE - var SelectBuild = DataListSqlSelectBuilder.Build(DataList.FieldDefinitions, ListViewFieldList); + var SelectBuild = DataListSqlSelectBuilder.Build(DataList.FieldDefinitions, InternalListViewFieldList); //FROM CLAUSE var qFrom = DataList.SQLFrom; @@ -53,11 +64,11 @@ namespace AyaNova.DataList var qOrderBy = string.Empty; //WHERE CLAUSE - FILTER - qWhere = DataListSqlFilterCriteriaBuilder.DataFilterToSQLCriteria(DataList.FieldDefinitions, ListViewArray); + qWhere = DataListSqlFilterCriteriaBuilder.DataFilterToSQLCriteria(DataList.FieldDefinitions, InternalListViewArray); //ORDER BY CLAUSE - SORT //BUILD ORDER BY - qOrderBy = DataListSqlFilterOrderByBuilder.DataFilterToSQLOrderBy(DataList.FieldDefinitions, ListViewArray); + qOrderBy = DataListSqlFilterOrderByBuilder.DataFilterToSQLOrderBy(DataList.FieldDefinitions, InternalListViewArray); //LIMIT AND OFFSET CLAUSE - PAGING listOptions.Offset = listOptions.Offset ?? ListOptions.DefaultOffset; @@ -72,7 +83,7 @@ namespace AyaNova.DataList qTotalRecordsQuery = $"SELECT COUNT(*) {qFrom} {qWhere}".Replace(" ", " "); //RETURN OBJECTS - int returnRowColumnCount = ListViewFieldList.Count(); + int returnRowColumnCount = PublicListViewFieldList.Count(); List> rows = new List>(); long totalRecordCount = 0; @@ -93,7 +104,7 @@ namespace AyaNova.DataList //INSERT REMAINING FIELDS FROM TEMPLATE INTO THE RETURN ROWS LIST - foreach (string TemplateField in ListViewFieldList) + foreach (string TemplateField in PublicListViewFieldList) { //get the AyaObjectFieldDefinition @@ -194,7 +205,7 @@ namespace AyaNova.DataList //BUILD THE COLUMNS RETURN PROPERTY JSON FRAGMENT Newtonsoft.Json.Linq.JArray ColumnsJSON = null; - ColumnsJSON = DataList.GenerateListColumnsJSONFromListView(ListViewArray); + ColumnsJSON = DataList.GenerateListColumnsJSONFromListView(PublicListViewArray); return new ApiDataListResponse(rows, totalRecordCount, ColumnsJSON);