Exemplo n.º 1
0
        public async Task <PagedResultDto <ItemListDto> > GetAllItems(GetAllItemInput input)
        {
            var filteredItems = _itemRepository.GetAll().IgnoreQueryFilters().Where(i => !i.IsDeleted).AsNoTracking().SearchItemName(input)

                                // .WhereIf(!string.IsNullOrWhiteSpace(input.Filter), e => e.Name.StringValue.ToLower().Contains(input.Filter.ToLower().Trim())
                                .WhereIf(!string.IsNullOrEmpty(input.Filter), e => e.ItemNumber.ToLower().Trim().Contains(input.Filter.ToLower().Trim()) ||
                                         !string.IsNullOrEmpty(e.BarCode) && e.BarCode.ToLower().Trim().Contains(input.Filter.ToLower().Trim()))
                                .WhereIf(input.ClassIds != null && input.ClassIds.Count > 0, i => input.ClassIds.Contains(i.ItemClassId))
                                .WhereIf(input.CategoryIds != null && input.CategoryIds.Count > 0, i => input.CategoryIds.Contains(i.CategoryId))
                                .WhereIf(input.SubCategoryIds != null && input.SubCategoryIds.Count > 0, i => input.SubCategoryIds.Contains(i.SubCategoryId))
                                .WhereIf(input.FromDate.HasValue, i => i.CreationTime >= input.FromDate)
                                .WhereIf(input.ToDate.HasValue, i => i.CreationTime <= input.ToDate)
                                .WhereIf(input.ManuFactoryIds != null && input.ManuFactoryIds.Count > 0, i => input.ManuFactoryIds.Contains(i.ItemClassId));

            var query = from item in filteredItems
                        join itemClass in _itemClassRepository.GetAll().AsNoTracking()
                        on item.ItemClassId equals itemClass.Id into nullableItemClasses
                        from itemClass in nullableItemClasses.DefaultIfEmpty()
                        join category in _categoryRepository.GetAll().AsNoTracking()
                        on item.CategoryId equals category.Id into nullableCategories
                        from category in nullableCategories.DefaultIfEmpty()
                        join subcategory in _subcategoryRepository.GetAll().AsNoTracking()
                        on item.SubCategoryId equals subcategory.Id into subcategories
                        from subcategory in subcategories.DefaultIfEmpty()
                        join manuFactory in _manuFactoryRepository.GetAll().AsNoTracking()
                        on item.ManuFactoryId equals manuFactory.Id into nullableManuFactories
                        from manuFactory in nullableManuFactories.DefaultIfEmpty()
                        join corporatefavorite in _corporateRepository.GetAll().AsNoTracking() on item.CorporateFavoriteId equals corporatefavorite.Id into corporatesfavorite
                        from corporatefavorite in corporatesfavorite.DefaultIfEmpty()

                        select new ItemListDto
            {
                Id                    = item.Id,
                ItemNumber            = item.ItemNumber,
                NameAr                = item.Name["ar"],
                NameEn                = item.Name["en"],
                Description           = item.Description == null ? "" : item.Description.CurrentCultureText,
                BarCode               = item.BarCode,
                IsActive              = item.IsActive,
                IsInsurance           = item.IsInsurance,
                ItemClassName         = itemClass == null ? "" : itemClass.Name.CurrentCultureText,
                CategoryName          = category == null ? "" : category.Name.CurrentCultureText,
                SubCategoryName       = subcategory == null ? "" : subcategory.Name.CurrentCultureText,
                CorporateFavoriteName = corporatefavorite == null ? "" : corporatefavorite.Name.CurrentCultureText,
                CreatedOn             = item.CreationTime,
                ManuFactoryName       = manuFactory == null ? "" : manuFactory.Name.CurrentCultureText
            };

            var totalCount = await query.CountAsync();

            var items = await query.OrderBy(input.Sorting ?? "id desc").PageBy(input).ToListAsync();

            return(new PagedResultDto <ItemListDto>(totalCount, items));
        }
Exemplo n.º 2
0
        public static IQueryable <Item> SearchItem(this IQueryable <Item> items, GetAllItemInput input)
        {
            // IQueryable<Item> itemCollection ;
            var filters = input.Filter.Split('-');

            Expression <Func <Item, bool> > predicate = p => p.IsActive == true;

            if (filters.Length > 0)
            {
                if (filters.Length == 1)
                {
                    predicate.And(i => i.Name.CurrentCultureText.Contains(filters[0]));
                }
                if (filters.Length == 2)
                {
                    predicate.And(i => i.Name.CurrentCultureText.StartsWith(filters[0]));
                    predicate.And(i => i.Name.CurrentCultureText.Contains(filters[1]));
                }
                if (filters.Length == 3)
                {
                    predicate.And(i => i.Name.CurrentCultureText.StartsWith(filters[0]));
                    predicate.And(i => i.Name.CurrentCultureText.Contains(filters[1]));
                    predicate.And(i => i.Name.CurrentCultureText.EndsWith(filters[2]));
                }
                items = items.Where(predicate);
            }
            else
            {
                // var items2 = ObjectMapper.Map<Item>(input);

                //throw new UserFriendlyException($"Search text area is empty ");
            }
            return(items);

            // var predicat = PredicateBuilder.True<ite>();

            // predicate = predicate.And(m => m.ToString().StartsWith(filters[0]));

            //predicate = obj.Name2.Length > 0 ? predicate.And(m => m.Name.Contains(obj.Name) && m.Name.EndWith(obj.Name)) : predicate;
            //predicate = obj.Name3.Length > 0 ? predicate.And(m => m.Name.WndWith(obj.Name) && m.Name.EndWith(obj.Name) && m.Name.EndWith(obj.Name)) : predicate;

            //var filters = input.Filter.Split('%');
            //Expression<Func<Student, bool>> pridicate = p => p.IsActive == true;
            //if (filters.Length == 1)
            //{
            //    pridicate.And(p => p.FirstName.Contains(filters[0]));

            //}
            //if (filters.Length == 2)
            //{
            //    pridicate.And(p => p.FirstName.StartsWith(filters[0]));
            //    pridicate.And(p => p.FirstName.Contains(filters[1]));
            //}
            //if (filters.Length == 3)
            //{
            //    pridicate.And(p => p.FirstName.StartsWith(filters[0]));
            //    pridicate.And(p => p.FirstName.Contains(filters[1]));
            //    pridicate.And(p => p.FirstName.EndsWith(filters[2]));

            //}
        }