コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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();
        }
コード例 #4
0
 public SearchPage()
 {
     InitializeComponent();
     if (SetMSRBeforStart != null)
     {
         this.MSR = SetMSRBeforStart;
     }
     else
     {
         throw new Exception();
     }
 }
コード例 #5
0
        // 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));
        }
コード例 #6
0
        // 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));
        }
コード例 #7
0
        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();
        }
コード例 #8
0
        // 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));
        }
コード例 #9
0
        //

        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));
            }
        }
コード例 #10
0
        //

        public static JObject TranslateMainSearchResultToAPIResult_Pathway(MainSearchResults mainResultsData, MainSearchResult sourceResult, JObject translatedResult)
        {
            var detailData = new JObject()
            {
                { "TBD", "TBD" }
            };

            return(JObjectify(detailData));
        }
コード例 #11
0
        //

        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);
        }
コード例 #12
0
        //

        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);
            }
        }
コード例 #13
0
        //

        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);
        }
コード例 #14
0
        //

        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);
        }