Exemplo n.º 1
0
        public async Task <PartialViewResult> Search(SpecSearchTypeConstant t, string q)
        {
            var results = await SpecFactory.GetSearchResults(t, q, UserSecurity);

            var col = new TCollection();

            col.AddRange(results);
            if (IsLoggedIn)
            {
                col.ForEach(p => p.LoggedInEmployeeId = UserSecurity.EmployeeId);
            }
            return(PartialView(col));
        }
Exemplo n.º 2
0
        public async Task <TSearchResult[]> GetSearchResults(SpecSearchTypeConstant type, string query,
                                                             IUserSecurity employeeSecurity)
        {
            var q = Ctx.BuildSpecifications.AsNoTracking().OfBuildSpecType(_buildSpecificationType);

            switch (type)
            {
            case SpecSearchTypeConstant.Mine:
                if (employeeSecurity == null)
                {
                    q = q.Where(p => 1 == 2);
                }
                else
                {
                    var contains = $"%{query}%";
                    q = q.Where(p => p.OwnerEmployeeId == employeeSecurity.EmployeeId);
                    if (!string.IsNullOrWhiteSpace(query))
                    {
                        q = q.Where(p => EF.Functions.Like(p.Name, contains)).OrderBy(p => p.Name);
                    }
                }

                break;

            case SpecSearchTypeConstant.Name:
                if (employeeSecurity == null)
                {
                    q = q.Where(p => 1 == 2);
                }
                else
                {
                    var contains = $"%{query}%";
                    q = q.Where(p => EF.Functions.Like(p.Name, contains)).OrderBy(p => p.Name);
                }

                break;

            case SpecSearchTypeConstant.Owner:
                if (string.IsNullOrWhiteSpace(query))
                {
                    q = q.Where(p => 1 == 2);
                }
                else
                {
                    var empIds = Ctx.Employees.Search(query).Select(p => p.Id).ToArray();
                    q = q.Where(p => empIds.Contains(p.OwnerEmployeeId)).OrderBy(p => p.Owner.FirstName)
                        .ThenBy(p => p.Owner.LastName).ThenBy(p => p.Name);
                }

                break;

            case SpecSearchTypeConstant.OsSpec:
                if (string.IsNullOrWhiteSpace(query) || _buildSpecificationType == BuildSpecificationTypeConstant.OperatingSystem)
                {
                    q = q.Where(p => 1 == 2);
                }
                else
                {
                    var sw = $"{query}%";
                    q = q.Where(p => EF.Functions.Like(p.Parent.Name, sw));
                }

                break;

            default:
                throw new ArgumentException(@"SpecSearchTypeConstant not supported.", nameof(type));
            }

            return(await SearchResultMapper(q));
        }