public async Task GetMatters()

in tree/master/cloud/src/solution/Microsoft.Legal.MatterCenter.Web/Common/MatterProvision.cs [214:397]


        public async Task<SearchResponseVM> GetMatters(SearchRequestVM searchRequestVM, ClientContext clientContext)
        {
            var searchObject = searchRequestVM.SearchObject;
            // Encode all fields which are coming from js
            SearchUtility.EncodeSearchDetails(searchObject.Filters, false);
            // Encode Search Term
            searchObject.SearchTerm = (searchObject.SearchTerm != null) ?
                WebUtility.HtmlEncode(searchObject.SearchTerm).Replace(ServiceConstants.ENCODED_DOUBLE_QUOTES,
                ServiceConstants.DOUBLE_QUOTE) : string.Empty;

            var searchResultsVM = await matterRepositoy.GetMattersAsync(searchRequestVM, clientContext);
            if (searchResultsVM.TotalRows > 0)
            {                

                dynamic matterDataList = new List<dynamic>();
                IEnumerable<IDictionary<string, object>> searchResults = searchResultsVM.SearchResults;
                var searchSchema = configuration.GetSection("Search");
                string key1 = configuration.GetSection("Search").GetSection("ManagedPropertyMatterName").Value.ToString();
                foreach (var searchResult in searchResults)
                {
                    dynamic matterData = new ExpandoObject();
                    matterData.matterSubAreaOfLaw = string.Empty;
                    string subAreaOfLaw = "";
                    string subAreaOfLaw1 = "";
                    string subAreaOfLaw2 = "";
                    foreach (var key in searchResult.Keys)
                    {                        
                        if(key.ToString().ToLower() == searchSettings.ManagedPropertyMatterName.ToString().ToLower())
                        {                            
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterName").Key,
                                WebUtility.HtmlDecode(searchResult[key].ToString()));                            
                        }
                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyDescription.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterDescription").Key,
                                searchResult[key].ToString());
                        }
                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyOpenDate.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterCreatedDate").Key,
                                searchResult[key].ToString());
                        }

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyPath.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterUrl").Key,
                                searchResult[key].ToString());
                        }

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertySiteName.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterClientUrl").Key,
                                searchResult[key].ToString());
                        }
                        //Added MatterDefault Content type to part of Matter Search results.
                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyMatterDefaultContentType.ToLower())
                        {
                            // due to a change in search schema, this is failing with a null reference exception unless a managed property is mapped manually in search settings
                            // for more details see https://github.com/Microsoft/mattercenter/issues/759
                            // check for null until this mapping issue is addressed
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterDefaultContentType").Key,
                                searchResult[key]?.ToString());
                        }

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyPracticeGroup.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterPracticeGroup").Key,
                                searchResult[key].ToString().Trim().TrimEnd(';'));
                        }

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyAreaOfLaw.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterAreaOfLaw").Key,
                                searchResult[key].ToString().Trim().TrimEnd(';'));
                        }

                        #region Subarea of law login
                        if (key.ToString().ToLower() == searchSettings.ManagedPropertySubAreaOfLaw2.ToLower())
                        {
                            subAreaOfLaw2 = searchResult[key].ToString().Trim().TrimEnd(';');
                        }
                        if (key.ToString().ToLower() == searchSettings.ManagedPropertySubAreaOfLaw1.ToLower())
                        {
                            subAreaOfLaw1 = searchResult[key].ToString().Trim().TrimEnd(';');
                        }

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertySubAreaOfLaw.ToLower())
                        {
                            subAreaOfLaw = searchResult[key].ToString().Trim().TrimEnd(';');
                        }

                        if (subAreaOfLaw2 != string.Empty && subAreaOfLaw1 != string.Empty && subAreaOfLaw != string.Empty)
                        {
                            ServiceUtility.AddProperty(matterData, "matterSubAreaOfLaw", subAreaOfLaw2);
                        }

                        if (subAreaOfLaw2 == string.Empty && subAreaOfLaw1 != string.Empty && subAreaOfLaw != string.Empty)
                        {
                            ServiceUtility.AddProperty(matterData, "matterSubAreaOfLaw", subAreaOfLaw1);
                        }

                        if (subAreaOfLaw2 == string.Empty && subAreaOfLaw1 == string.Empty && subAreaOfLaw != string.Empty)
                        {
                            ServiceUtility.AddProperty(matterData, "matterSubAreaOfLaw",  WebUtility.HtmlDecode(subAreaOfLaw));
                        }
                        #endregion

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyClientName.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterClient").Key,
                                searchResult[key].ToString());
                        }

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyClientID.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterClientId").Key,
                                searchResult[key].ToString());
                        }

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyBlockedUploadUsers.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("hideUpload").Key,
                                searchResult[key].ToString());
                        }

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyResponsibleAttorney.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterResponsibleAttorney").Key,
                                searchResult[key].ToString());
                        }

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyMatterId.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterID").Key,
                                searchResult[key].ToString());
                        }

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyMatterGuid.ToLower())
                        {
                            ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterGuid").Key,
                                searchResult[key].ToString());
                        }

                        if (key.ToString().ToLower() == searchSettings.ManagedPropertyLastModifiedTime.ToLower())
                        {
                            if (searchResult[key] != null && (searchResult[key].ToString() != string.Empty))
                            {
                                ServiceUtility.AddProperty(matterData,
                                configuration.GetSection("Search").GetSection("SearchColumnsUIPickerForMatter").GetSection("matterModifiedDate").Key,
                                searchResult[key].ToString());
                            }
                        }
                        ServiceUtility.AddProperty(matterData,"PinType","Pin");
                    }
                    matterDataList.Add(matterData);
                }
                searchResultsVM.MatterDataList = matterDataList;

                searchResultsVM.SearchResults = null;
                if (searchRequestVM.SearchObject.IsUnique && searchResultsVM.MatterDataList != null && !string.IsNullOrWhiteSpace(searchRequestVM.SearchObject.UniqueColumnName))
                {
                    searchResultsVM.MatterDataList = GetUniqueResults(searchRequestVM, searchResultsVM);
                }
                return searchResultsVM;
            }
            else
            {
                return searchResultsVM;
            }
        }