public void SearchForDepartments(MainSearchResult res, string query, bool retriveRelatedEmployees = true, bool retriveRelatedProjects = true) { query = query.ToLower(); List <Department> resDepts = db.Departments.Where(d => d.Title.ToLower().Contains(query)).ToList(); res.departmentSearchResults.AddRange(resDepts); res.departmentSearchResults = res.departmentSearchResults.Distinct().ToList(); //we'll also get the employees associated to these departments if (retriveRelatedEmployees) { List <int> deptIds = resDepts.Select(d => d.DepartmentID).ToList(); List <Employee> resEmp = db.Employees.Where(e => e.DepartmentID.HasValue && deptIds.Contains(e.DepartmentID.Value)).ToList(); res.employeeSearchResults.AddRange(resEmp); res.employeeSearchResults = res.employeeSearchResults.Distinct().ToList(); } //we'll also get the proejcts associated to these departments if (retriveRelatedProjects) { List <int> deptIds = resDepts.Select(d => d.DepartmentID).ToList(); List <Project> resProj = db.Projects.Where(p => p.DepartmentID.HasValue && deptIds.Contains(p.DepartmentID.Value)).ToList(); res.projectSearchResults.AddRange(resProj); res.projectSearchResults = res.projectSearchResults.Distinct().ToList(); } }
public void SearchForProjects(MainSearchResult res, string query) { query = query.ToLower(); List <Project> resProj = db.Projects.Where(p => p.Title.ToLower().Contains(query)).ToList(); res.projectSearchResults.AddRange(resProj); res.projectSearchResults = res.projectSearchResults.Distinct().ToList(); }
public void SearchForRoles(MainSearchResult res, string query) { query = query.ToLower(); List <Role> roles = db.Roles.Where(r => (r.Name.ToLower().Contains(query))).ToList(); List <int> rolesIds = roles.Select(r => r.RoleID).ToList(); List <Employee> resEmp = db.Employees.Where(e => e.DepartmentID.HasValue && rolesIds.Contains(e.DepartmentID.Value)).ToList(); res.employeeSearchResults.AddRange(resEmp); res.employeeSearchResults = res.employeeSearchResults.Distinct().ToList(); }
public SearchPage() { InitializeComponent(); if (SetMSRBeforStart != null) { this.MSR = SetMSRBeforStart; } else { throw new Exception(); } }
// GET: Search/GetPartialEmployees public JsonResult GetPartialEmployees(string query) { MainSearchResult searchRes = new MainSearchResult(); //executing the search queries SearchForDepartments(searchRes, query); SearchForEmployees(searchRes, query); SearchForProjects(searchRes, query); SearchForRoles(searchRes, query); List <SearchResult> results = searchRes.getEmployeeResults(); return(this.Json(results, JsonRequestBehavior.AllowGet)); }
// GET: Search/GetPartial public JsonResult GetPartial(string query) { MainSearchResult searchRes = new MainSearchResult(); //executing the search queries SearchForDepartments(searchRes, query); SearchForEmployees(searchRes, query); SearchForProjects(searchRes, query); SearchForRoles(searchRes, query); searchRes.initializeQuickSearchResults(); return(this.Json(searchRes.quickSearch, JsonRequestBehavior.AllowGet)); }
public void SearchForEmployees(MainSearchResult res, string query) { query = query.ToLower(); List <Employee> resEmp = db.Employees.Where(e => (e.FirstName.ToLower().Contains(query) || e.LastName.ToLower().Contains(query)) || (e.FirstName + " " + e.LastName).ToLower().Contains(query) || (e.LastName + " " + e.FirstName).ToLower().Contains(query) || e.Email.ToLower().Contains(query) || e.Account.ToLower().Contains(query) || query.Contains(e.Account.ToLower()) || query.Contains(e.Email.ToLower()) || query.Contains(e.FirstName.ToLower()) || query.Contains(e.LastName.ToLower()) ).ToList(); res.employeeSearchResults.AddRange(resEmp); res.employeeSearchResults = res.employeeSearchResults.Distinct().ToList(); }
// GET: Search public ActionResult Index(string query, string filter, int?page, string secondaryFilter) { MainSearchResult searchRes = new MainSearchResult(); bool filteredData = false; if (!String.IsNullOrEmpty(filter) && Const.SearchModelFilters.Any(x => x.ToLower() == filter.ToLower())) { ViewBag.filteredData = true; filteredData = true; } else { ViewBag.filteredData = false; } if (!String.IsNullOrEmpty(secondaryFilter)) { ViewBag.secondaryFilter = secondaryFilter; } //executing the search queries if (!String.IsNullOrEmpty(query) && query.Length >= 2) { SearchForDepartments(searchRes, query); SearchForEmployees(searchRes, query); SearchForProjects(searchRes, query); SearchForRoles(searchRes, query); ViewBag.searchDone = true; } else if (!String.IsNullOrEmpty(query) && query.Length > 0) { ViewBag.searchDone = false; } //checking if we will omit any data if ((searchRes.employeeSearchResults.Count > 12 || searchRes.employeeSearchResults.Count > 12 || searchRes.employeeSearchResults.Count > 12) && !filteredData) { ViewBag.dataIsOmitted = true; //limiting the number of results shown searchRes.employeeSearchResults = searchRes.employeeSearchResults.Take(12).ToList(); searchRes.departmentSearchResults = searchRes.departmentSearchResults.Take(12).ToList(); searchRes.projectSearchResults = searchRes.projectSearchResults.Take(12).ToList(); } searchRes.initializeQuickSearchResults(); ViewBag.query = query; ViewBag.filter = filter; //initialize baseUrl string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd('/') + "/"; ViewBag.baseUrl = baseUrl; if (filteredData) { int pageSize = Const.SearchParams.pageSize; int pageNumber = (page ?? 1); if (!String.IsNullOrEmpty(secondaryFilter)) { //applying project filters #region ProjectFilters if (secondaryFilter == "project_name") { searchRes.projectSearchResults = searchRes.projectSearchResults.OrderBy(x => x.Title).ToList(); } else if (secondaryFilter == "project_name_desc") { searchRes.projectSearchResults = searchRes.projectSearchResults.OrderByDescending(x => x.Title).ToList(); } else if (secondaryFilter == "project_department") { searchRes.projectSearchResults = searchRes.projectSearchResults.OrderBy(x => x.Department.Title).ToList(); } else if (secondaryFilter == "project_department_desc") { searchRes.projectSearchResults = searchRes.projectSearchResults.OrderByDescending(x => x.Department.Title).ToList(); } else if (secondaryFilter == "project_start_date") { searchRes.projectSearchResults = searchRes.projectSearchResults.OrderBy(x => x.StartDate).ToList(); } else if (secondaryFilter == "project_start_date_desc") { searchRes.projectSearchResults = searchRes.projectSearchResults.OrderByDescending(x => x.StartDate).ToList(); } else if (secondaryFilter == "project_end_date") { searchRes.projectSearchResults = searchRes.projectSearchResults.OrderBy(x => x.EndDate).ToList(); } else if (secondaryFilter == "project_end_date_desc") { searchRes.projectSearchResults = searchRes.projectSearchResults.OrderByDescending(x => x.EndDate).ToList(); } #endregion //applying department filters #region DepartmentFilters if (secondaryFilter == "department_name") { searchRes.departmentSearchResults = searchRes.departmentSearchResults.OrderBy(x => x.Title).ToList(); } else if (secondaryFilter == "department_name_desc") { searchRes.departmentSearchResults = searchRes.departmentSearchResults.OrderByDescending(x => x.Title).ToList(); } else if (secondaryFilter == "department_start_date") { searchRes.departmentSearchResults = searchRes.departmentSearchResults.OrderBy(x => x.StartDate).ToList(); } else if (secondaryFilter == "department_start_date_desc") { searchRes.departmentSearchResults = searchRes.departmentSearchResults.OrderByDescending(x => x.StartDate).ToList(); } else if (secondaryFilter == "department_employees_number") { searchRes.departmentSearchResults = searchRes.departmentSearchResults.Where(x => x.Employees == null).Concat( searchRes.departmentSearchResults.Where(x => x.Employees != null).OrderBy(x => x.Employees.Count())).ToList(); } else if (secondaryFilter == "department_employees_number_desc") { searchRes.departmentSearchResults = searchRes.departmentSearchResults.Where(x => x.Employees != null).OrderBy(x => x.Employees.Count()).Concat( searchRes.departmentSearchResults.Where(x => x.Employees == null)).ToList(); } else if (secondaryFilter == "department_description") { searchRes.departmentSearchResults = searchRes.departmentSearchResults.OrderBy(x => x.DeptDescription).ToList(); } else if (secondaryFilter == "department_description_desc") { searchRes.departmentSearchResults = searchRes.departmentSearchResults.OrderByDescending(x => x.DeptDescription).ToList(); } #endregion //applying employee filters #region EmployeeFilters if (secondaryFilter == "employee_name") { searchRes.employeeSearchResults = searchRes.employeeSearchResults.OrderBy(x => x.FirstName + " " + x.LastName).ToList(); } else if (secondaryFilter == "employee_name_desc") { searchRes.employeeSearchResults = searchRes.employeeSearchResults.OrderByDescending(x => x.FirstName + " " + x.LastName).ToList(); } else if (secondaryFilter == "employee_department") { searchRes.employeeSearchResults = searchRes.employeeSearchResults.OrderBy(x => x.Department.Title).ToList(); } else if (secondaryFilter == "employee_department_desc") { searchRes.employeeSearchResults = searchRes.employeeSearchResults.OrderByDescending(x => x.Department.Title).ToList(); } else if (secondaryFilter == "employee_role") { searchRes.employeeSearchResults = searchRes.employeeSearchResults.Where(x => x.Role == null).Concat( searchRes.employeeSearchResults.Where(x => x.Role != null).OrderBy(x => x.Role.Name)).ToList(); } else if (secondaryFilter == "employee_role_desc") { searchRes.employeeSearchResults = searchRes.employeeSearchResults.Where(x => x.Role != null).OrderBy(x => x.Role.Name).Concat( searchRes.employeeSearchResults.Where(x => x.Role == null)).ToList(); } else if (secondaryFilter == "employee_date") { searchRes.employeeSearchResults = searchRes.employeeSearchResults.OrderBy(x => x.HireDate).ToList(); } else if (secondaryFilter == "employee_date_desc") { searchRes.employeeSearchResults = searchRes.employeeSearchResults.OrderByDescending(x => x.HireDate).ToList(); } #endregion } //depending on the selected filter, we will initialize a pagedList if (filter.ToLower() == Const.SearchParams.EmployeeFilterName.ToLower()) { searchRes.pagedEmployees = searchRes.employeeSearchResults.ToPagedList(pageNumber, pageSize); } else if (filter.ToLower() == Const.SearchParams.DepartmentFilterName.ToLower()) { searchRes.pagedDepartments = searchRes.departmentSearchResults.ToPagedList(pageNumber, pageSize); } else if (filter.ToLower() == Const.SearchParams.ProjectFilterName.ToLower()) { searchRes.pagedProjects = searchRes.projectSearchResults.ToPagedList(pageNumber, pageSize); } } return(View(searchRes)); }
// public static void TranslateGrayButtonsToResultPills(MainSearchResults mainResultsData, MainSearchResult sourceResult, JObject translatedResult) { var pills = new List <Models.API.TagSet>(); var grayButtonErrors = new List <JObject>(); foreach (var button in sourceResult.Buttons ?? new List <Models.Helpers.SearchResultButton>()) { var set = new Models.API.TagSet(); set.Label = button.CategoryLabel; set.Total = button.TotalItems; set.Values = new List <Models.API.TagItem>(); set.Icon = TranslateGrayButtonIcon(button.CategoryType); try { switch (button.HandlerType) { case "handler_RenderCheckboxFilter": case "handler_RenderExternalCodeFilter": set.TagItemType = "tagItemType:FilterItem"; foreach (var item in button.Items) { set.Values.Add(new Models.API.TagItem() { Label = GetValueIfPresent(item, "ItemCodeTitle") ?? GetValueIfPresent(item, "ItemLabel"), FilterID = int.Parse(GetValueIfPresent(item, "CategoryId") ?? "0"), FilterItemID = int.Parse(GetValueIfPresent(item, "ItemCodeId") ?? "0"), FilterItemText = GetValueIfPresent(item, "ItemCodeTitle") }); } break; case "handler_RenderDetailPageLink": case "handler_RenderConnection": set.TagItemType = "tagItemType:Link"; foreach (var item in button.Items) { set.Values.Add(new Models.API.TagItem() { Label = GetValueIfPresent(item, "TargetLabel"), URL = "/" + GetValueIfPresent(item, "TargetType") + "/" + (GetValueIfPresent(item, "TargetId") == "0" ? GetValueIfPresent(item, "TargetCTID") : GetValueIfPresent(item, "TargetId")) }); } break; case "handler_RenderQualityAssurance": set.TagItemType = "tagItemType:Link"; foreach (var item in button.Items) { set.Values.Add(new Models.API.TagItem() { Label = GetValueIfPresent(item, "Relationship") + " " + GetValueIfPresent(item, "Agent"), URL = "/organization/" + GetValueIfPresent(item, "AgentId") }); } break; case "handler_GetRelatedItemsViaAJAX": set.TagItemType = "tagItemType:Link"; set.URL = "/Search/GetTagSetItems"; set.QueryData = new TagSetRequest() { TargetType = GetValueIfPresent(button.RenderData, "TargetEntityType"), RecordId = sourceResult.RecordId, SearchType = mainResultsData.SearchType }; break; default: grayButtonErrors.Add(new JObject() { { "Error matching handler", button.HandlerType } }); break; } } catch (Exception ex) { grayButtonErrors.Add(new JObject() { { "Error Translating Tag Item", ex.Message }, { "Inner Exception", ex.InnerException?.Message ?? "" }, { "Raw Item", JObject.FromObject(button) } }); } pills.Add(set); } translatedResult.Add("SearchTags", JArray.FromObject(pills)); if (grayButtonErrors.Count() > 0) { translatedResult.Add("debug:grayButtonErrors", JArray.FromObject(grayButtonErrors)); } }
// public static JObject TranslateMainSearchResultToAPIResult_Pathway(MainSearchResults mainResultsData, MainSearchResult sourceResult, JObject translatedResult) { var detailData = new JObject() { { "TBD", "TBD" } }; return(JObjectify(detailData)); }
// public static JObject TranslateMainSearchResultToAPIResult_Generic <T>(MainSearchResults mainResultsData, MainSearchResult sourceResult, Func <int, bool, T> getDetailForAPI, bool skippingCache = false) { var detailData = getDetailForAPI(sourceResult.RecordId, skippingCache); var result = JObjectify(detailData); TranslateGrayButtonsToResultPills(mainResultsData, sourceResult, result); return(result); }
// private static void TranslateLocations(MainSearchResult sourceResult, JObject holder, string propertyName) { try { if (sourceResult.Properties.ContainsKey("T_Locations")) { var addressList = new List <JObject>(); foreach (var rawAddress in (( JArray )sourceResult.Properties["T_Locations"]).Select(m => ( JObject )m).ToList()) { //Convert the address var address = new JObject(); AddIfPresent(rawAddress, "Name", address, "Name"); AddIfPresent(rawAddress, "Description", address, "Description"); AddIfPresent(rawAddress, "PostOfficeBoxNumber", address, "PostOfficeBoxNumber"); AddIfPresent(rawAddress, "StreetAddress", address, "StreetAddress"); AddIfPresent(rawAddress, "AddressLocality", address, "AddressLocality"); AddIfPresent(rawAddress, "AddressRegion", address, "AddressRegion"); AddIfPresent(rawAddress, "PostalCode", address, "PostalCode"); AddIfPresent(rawAddress, "AddressCountry", address, "AddressCountry"); AddIfPresent(rawAddress, "Latitude", address, "Latitude", m => Double.Parse(m ?? "0.0")); AddIfPresent(rawAddress, "Longitude", address, "Longitude", m => Double.Parse(m ?? "0.0")); //Convert the identifier if (rawAddress.ContainsKey("Identifier")) { try { var rawIdentifierData = JArray.FromObject(rawAddress["Identifier"]).Select(m => ( JObject )m).ToList(); var identifierData = new List <JObject>(); foreach (var rawIdentifier in rawIdentifierData) { var identifierItem = new JObject(); AddIfPresent(rawIdentifier, "Name", identifierItem, "IdentifierTypeName"); AddIfPresent(rawIdentifier, "IdentifierValueCode", identifierItem, "IdentifierValueCode"); if (identifierItem.Properties().Count() > 0) { identifierData.Add(identifierItem); } } //Store the identifier if (identifierData.Count() > 0) { address.Add("Identifier", JArray.FromObject(identifierData)); } } catch (Exception ex) { holder["debug:TranslateLocationsIdentifierError"] = holder["debug:TranslateLocationsIdentifierError"] ?? new JArray(); ((JArray)holder["debug:TranslateLocationsIdentifierError"]).Add(ex.Message); } } //Store the address address = JObjectify(address); //Ensure null values are stripped out addressList.Add(address); } //Store the address list if (addressList.Count() > 0) { holder[propertyName] = JArray.FromObject(addressList); } } } catch (Exception ex) { holder.Add("debug:TranslateLocationsError", ex.Message); } }
// private static BaseDisplay TranslateBasicData(MainSearchResults mainResultsData, MainSearchResult sourceResult) { //Hold result var result = new BaseDisplay(); //Meta info result.Meta_Language = "en"; //Not sure how to obtain this result.Meta_Id = sourceResult.RecordId; try { result.Meta_LastUpdated = DateTime.Parse(GetValueIfPresent(sourceResult.Properties, "T_LastUpdated") ?? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } catch { } try { result.Meta_StateId = int.Parse(GetValueIfPresent(sourceResult.Properties, "T_StateId") ?? "0"); } catch { } //Common info result.BroadType = GetValueIfPresent(sourceResult.Properties, "T_BroadType"); result.CTDLType = GetValueIfPresent(sourceResult.Properties, "T_CTDLType"); result.CTDLTypeLabel = GetValueIfPresent(sourceResult.Properties, "T_CTDLTypeLabel"); result.CTID = GetValueIfPresent(sourceResult.Properties, "CTID") ?? GetValueIfPresent(sourceResult.Properties, "ctid") ?? "unknown"; result.Name = sourceResult.Name; result.FriendlyName = sourceResult.FriendlyName; result.Description = sourceResult.Description; //Owner try { if (sourceResult.Properties.ContainsKey("Owner")) { if (mainResultsData.SearchType == "competencyframework") { var owner = ( JObject )sourceResult.Properties["Owner"]; if (owner != null) { result.OwnedByLabel = new LabelLink() { Label = CompetencyFrameworkServicesV2.GetEnglishString(owner["ceterms:name"], "Unknown Owner"), URL = "/resources/" + owner["ceterms:ctid"].ToString() }; } } else { result.OwnedByLabel = new LabelLink() { Label = GetValueIfPresent(sourceResult.Properties, "Owner") ?? "Unknown Owner", URL = "/organization/" + GetValueIfPresent(sourceResult.Properties, "OwnerId") ?? "0" }; } } } catch { } return(result); }
// public static JObject TranslateMainSearchResultToAPIResult_Generic2(MainSearchResults mainResultsData, MainSearchResult sourceResult) { //Basic Information common to all top-level types var result = JObjectify(TranslateBasicData(mainResultsData, sourceResult)); //Type-Specific Information switch (mainResultsData.SearchType) { case "organization": TranslateLocations(sourceResult, result, "Address"); AddIfPresent(sourceResult.Properties, "ResultImageUrl", result, "Image"); break; case "credential": TranslateLocations(sourceResult, result, "AvailableAt"); AddIfPresent(sourceResult.Properties, "ResultImageUrl", result, "Image"); AddIfPresent(sourceResult.Properties, "ResultIconUrl", result, "Meta_Icon"); break; case "assessment": case "learningopportunity": TranslateLocations(sourceResult, result, "AvailableAt"); break; default: break; } //Gray Buttons TranslateGrayButtonsToResultPills(mainResultsData, sourceResult, result); return(result); }