public SearchResponseVM GetPinnedData()

in tree/master/cloud/src/solution/Microsoft.Legal.MatterCenter.Service/Microsoft.Legal.MatterCenter.Repository/SharePointInfo/Search.cs [264:449]


        public SearchResponseVM GetPinnedData(SearchRequestVM searchRequestVM, string listName,
            string listColumnName, bool isShowDocument, ClientContext clientContext)
        {
            ////Holds logged-in user alias
            string userAlias = string.Empty;
            ////Object to store all the list items retrieved from SharePoint list
            ListItemCollection listItems;
            ////Stores the JSON structure with the meta-data of pinned matter/document
            string userPinnedDetails = string.Empty;

            SearchResponseVM searchResponse = new SearchResponseVM();
            try
                {
                    ////Get logged in user alias
                    Users currentUserDetail = userDetails.GetLoggedInUserDetails(clientContext);
                    userAlias = currentUserDetail.LogOnName;
                    listItems = spList.GetData(clientContext, listName, string.Format(CultureInfo.InvariantCulture,
                        camlQueries.UserPinnedDetailsQuery, searchSettings.PinnedListColumnUserAlias, userAlias, listColumnName));
                    if (listItems != null && listItems.Count > 0)
                    {
                        ////Since we are maintaining only single list item per user, listItems collection will have only one object; hence accessing first object
                        ////Check if column holds null or empty string. If non empty, pinned matter/document exists
                        if (!string.IsNullOrEmpty(Convert.ToString(listItems[0][listColumnName], CultureInfo.InvariantCulture)))
                        {
                            string userPinnedMatter = Convert.ToString(listItems[0][listColumnName], CultureInfo.InvariantCulture);
                            var sortCol = searchRequestVM.SearchObject.Sort.ByColumn;
                            sortCol = UppercaseFirst(sortCol);

                            if (isShowDocument)
                            {
                                Dictionary<string, DocumentData> userpinnedDocumentCollection =
                                    JsonConvert.DeserializeObject<Dictionary<string, DocumentData>>(userPinnedMatter);
                                searchResponse.TotalRows = userpinnedDocumentCollection.Count;

                                if (searchRequestVM.SearchObject.Sort.SortAndFilterPinnedData == false)
                                {
                                    searchResponse.DocumentDataList = userpinnedDocumentCollection.Values.Reverse();
                                }
                                else
                                {
                                    string lastModifiedDate = configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForDocument").GetSection("documentModifiedDate").GetValue<string>("keyName");
                                    string createdDate = configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForDocument").GetSection("documentCreatedDate").GetValue<string>("keyName");
                                    //searchResponse.DocumentDataList = userpinnedDocumentCollection.Values.Reverse();

                                    IList<DocumentData> filterPinnedDocList = null;
                                    filterPinnedDocList = GetPinDocsFilteredResult(searchRequestVM, userpinnedDocumentCollection);
                                    filterPinnedDocList = filterPinnedDocList
                                                               .Select(usr => {usr.DocumentMatterName = WebUtility.HtmlDecode(usr.DocumentMatterName);usr.DocumentPracticeGroup = usr.DocumentPracticeGroup;usr.DocumentName = usr.DocumentName;return usr; })
                                                               .ToList();
                                    if (filterPinnedDocList != null)
                                    {
                                        searchResponse.DocumentDataList = filterPinnedDocList;
                                        try
                                        {
                                            if (searchRequestVM.SearchObject.Sort.Direction == 0 && !string.IsNullOrWhiteSpace(sortCol) && filterPinnedDocList.Count > 1)
                                            {
                                                var getSortColNullCount = filterPinnedDocList.Select(x => TypeHelper.GetPropertyValue(x, sortCol)).Where(y => y == null);
                                                if (getSortColNullCount.Count() == 0)
                                                {
                                                    if (sortCol.ToLower().Trim() == lastModifiedDate.ToLower().Trim() || sortCol.ToLower().Trim() == createdDate.ToLower().Trim())
                                                    {
                                                        searchResponse.DocumentDataList = filterPinnedDocList.OrderBy(x => DateTime.Parse(TypeHelper.GetPropertyValue(x, sortCol).ToString())).ToList();
                                                    }
                                                    else
                                                    {
                                                        searchResponse.DocumentDataList = filterPinnedDocList.OrderBy(x => TypeHelper.GetPropertyValue(x, sortCol)).ToList();
                                                    }
                                                }
                                            }
                                            else if (searchRequestVM.SearchObject.Sort.Direction == 1 && !string.IsNullOrWhiteSpace(sortCol) && filterPinnedDocList.Count > 1)
                                            {
                                                var getSortColNullCount = filterPinnedDocList.Select(x => TypeHelper.GetPropertyValue(x, sortCol)).Where(y => y == null);
                                                if (getSortColNullCount.Count() == 0)
                                                {
                                                    if (sortCol.ToLower().Trim() == lastModifiedDate.ToLower().Trim() || sortCol.ToLower().Trim() == createdDate.ToLower().Trim())
                                                    {
                                                        searchResponse.DocumentDataList = filterPinnedDocList.OrderByDescending(x => DateTime.Parse(TypeHelper.GetPropertyValue(x, sortCol).ToString())).ToList();
                                                    }
                                                    else
                                                    {
                                                        searchResponse.DocumentDataList = filterPinnedDocList.OrderByDescending(x => TypeHelper.GetPropertyValue(x, sortCol)).ToList();
                                                    }
                                                }
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            string msg = ex.Message;
                                        }
                                        searchResponse.TotalRows = searchResponse.DocumentDataList.Count;
                                    }
                                    else
                                    {
                                        searchResponse.DocumentDataList = new List<DocumentData>();
                                        searchResponse.TotalRows = 0;
                                    }
                                }
                            }
                            else
                            {
                                Dictionary<string, MatterData> userpinnedMatterCollection =
                                    JsonConvert.DeserializeObject<Dictionary<string, MatterData>>(userPinnedMatter);
                                searchResponse.TotalRows = userpinnedMatterCollection.Count;
                                if (searchRequestVM.SearchObject.Sort.SortAndFilterPinnedData == false)
                                {
                                    searchResponse.MatterDataList = userpinnedMatterCollection.Values.Reverse();
                                }
                                else
                                {
                                    string lastModifiedDate = configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterModifiedDate").GetValue<string>("keyName");
                                    string createdDate = configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterCreatedDate").GetValue<string>("keyName");
                                    // searchResponse.MatterDataList = userpinnedMatterCollection.Values.Reverse();


                                    #region Code for filtering pinned data
                                    IList<MatterData> filterPinnedMatterList = null;

                                    filterPinnedMatterList = GetPinMattersFilteredResult(searchRequestVM, userpinnedMatterCollection);
                                    filterPinnedMatterList = filterPinnedMatterList
                                                               .Select(usr => { usr.MatterName = WebUtility.HtmlDecode(usr.MatterName); usr.MatterSubAreaOfLaw = WebUtility.HtmlDecode(usr.MatterSubAreaOfLaw); return usr; })
                                                               .ToList();
                                    if (filterPinnedMatterList != null)
                                    {
                                        searchResponse.MatterDataList = filterPinnedMatterList;
                                        try
                                        {
                                            if (searchRequestVM.SearchObject.Sort.Direction == 0 && !string.IsNullOrWhiteSpace(sortCol) && filterPinnedMatterList.Count > 1)
                                            {
                                                var getSortColNullCount = filterPinnedMatterList.Select(x => TypeHelper.GetPropertyValue(x, sortCol)).Where(y => y == null);
                                                if (getSortColNullCount.Count() == 0)
                                                {
                                                    if (sortCol.ToLower().Trim() == lastModifiedDate.ToLower().Trim() || sortCol.ToLower().Trim() == createdDate.ToLower().Trim())
                                                    {
                                                        searchResponse.MatterDataList = filterPinnedMatterList.OrderBy(x => DateTime.Parse(TypeHelper.GetPropertyValue(x, sortCol).ToString())).ToList();
                                                    }
                                                    else
                                                    {
                                                        searchResponse.MatterDataList = filterPinnedMatterList.OrderBy(x => TypeHelper.GetPropertyValue(x, sortCol)).ToList();
                                                    }
                                                }
                                            }
                                            else if (searchRequestVM.SearchObject.Sort.Direction == 1 && !string.IsNullOrWhiteSpace(sortCol) && filterPinnedMatterList.Count > 1)
                                            {
                                                var getSortColNullCount = filterPinnedMatterList.Select(x => TypeHelper.GetPropertyValue(x, sortCol)).Where(y => y == null);
                                                if (getSortColNullCount.Count() == 0)
                                                {
                                                    if (sortCol.ToLower().Trim() == lastModifiedDate.ToLower().Trim() || sortCol.ToLower().Trim() == createdDate.ToLower().Trim())
                                                    {
                                                        searchResponse.MatterDataList = filterPinnedMatterList.OrderByDescending(x => DateTime.Parse(TypeHelper.GetPropertyValue(x, sortCol).ToString())).ToList();
                                                    }
                                                    else
                                                    {
                                                        searchResponse.MatterDataList = filterPinnedMatterList.OrderByDescending(x => TypeHelper.GetPropertyValue(x, sortCol)).ToList();
                                                    }
                                                }
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            string msg = ex.Message;
                                        }
                                        searchResponse.TotalRows = searchResponse.MatterDataList.Count;
                                    }
                                    else
                                    {
                                        searchResponse.MatterDataList = new List<MatterData>();
                                        searchResponse.TotalRows = 0;
                                    }
                                    #endregion
                                }
                            }
                        }
                    }
                    else
                    {
                        searchResponse.TotalRows = 0;
                        searchResponse.NoPinnedMessage = ServiceConstants.NO_PINNED_MESSAGE;
                    }
                    return searchResponse;
                }
                catch (Exception ex)
                {
                    customLogger.LogError(ex, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, logTables.SPOLogTable);
                    throw;
                }
        }