Exemple #1
0
        public IEnumerable <Good> GetGoods(UserStoreGoodsFilter <int, int, int> filter)
        {
            try
            {
                var query = (
                    from pStore in Db.Set <UserPersonalStore>()
                    join storeGood in Db.Set <StoreGood>() on pStore.StoreId equals storeGood.StoreId
                    join good1 in Db.Set <Good>() on storeGood.GoodId equals good1.Id
                    where pStore.UserId == filter.UserId && pStore.StoreId == filter.StoreId
                    &&
                    (string.IsNullOrEmpty(filter.Articul) ||
                     (!string.IsNullOrEmpty(filter.Articul) && storeGood.Articul == filter.Articul)) &&
                    storeGood.StoreId == filter.StoreId
                    select good1);

                if (filter.GoodCategoryIds != null && filter.GoodCategoryIds.Any())
                {
                    query = from good in query
                            join goodCategory in Db.Set <GoodCategory>() on good.Id equals goodCategory.GoodId
                            where filter.GoodCategoryIds.Contains(goodCategory.CategoryId)
                            select good;
                }
                if (!string.IsNullOrEmpty(filter.SerialNumber))
                {
                    query = query.Where(it => it.SerialNumber == filter.SerialNumber);
                }

                if (!string.IsNullOrEmpty(filter.Name) && !string.IsNullOrWhiteSpace(filter.Name))
                {
                    query = query.Where(it => it.Name.Contains(filter.Name));
                }


                if (filter.GoodTypeIds != null && filter.GoodTypeIds.Any())
                {
                    query = from good in query
                            join goodType in Db.Set <GoodType>() on good.Id equals goodType.GoodId
                            where filter.GoodTypeIds.Contains(goodType.TypeId)
                            select good;
                }

                if (filter.GoodColorIds != null && filter.GoodColorIds.Any())
                {
                    query = from good in query
                            join goodColor in Db.Set <GoodColor>() on good.Id equals goodColor.GoodId
                            where filter.GoodColorIds.Contains(goodColor.ColorId)
                            select good;
                }
                if (filter.GoodDesignerIds != null && filter.GoodDesignerIds.Any())
                {
                    query = from good in query
                            join goodDesigner in Db.Set <GoodDesigner>() on good.Id equals goodDesigner.GoodId
                            where filter.GoodDesignerIds.Contains(goodDesigner.DesignerId)
                            select good;
                }
                if (filter.GoodMaterialsIds != null && filter.GoodMaterialsIds.Any())
                {
                    query = from good in query
                            join goodMaterial in Db.Set <GoodMaterial>() on good.Id equals goodMaterial.GoodId
                            where filter.GoodMaterialsIds.Contains(goodMaterial.MaterialId)
                            select good;
                }
                if (filter.GoodSizeIds != null && filter.GoodSizeIds.Any())
                {
                    query = query.Where(it => filter.GoodSizeIds.Contains(it.SizeId));
                }
                if (filter.BasePriceInterval != null && (filter.BasePriceInterval.End.HasValue || filter.BasePriceInterval.Start.HasValue))
                {
                    if (filter.BasePriceInterval.Start.HasValue && filter.BasePriceInterval.End.HasValue)
                    {
                        query = query.Where(it => it.BasePrice >= filter.BasePriceInterval.Start && it.BasePrice <= filter.BasePriceInterval.End);
                    }
                    if (filter.BasePriceInterval.End.HasValue && !filter.BasePriceInterval.Start.HasValue)
                    {
                        query = query.Where(it => it.BasePrice >= 0 && it.BasePrice <= filter.BasePriceInterval.End);
                    }
                    if (filter.BasePriceInterval.Start.HasValue && !filter.BasePriceInterval.End.HasValue)
                    {
                        query = query.Where(it => it.BasePrice >= filter.BasePriceInterval.Start);
                    }
                }
                if (filter.GoodHeightInterval != null && (filter.GoodHeightInterval.End.HasValue || filter.GoodHeightInterval.Start.HasValue))
                {
                    if (filter.GoodHeightInterval.Start.HasValue && filter.GoodHeightInterval.End.HasValue)
                    {
                        query = query.Where(it => it.Height >= filter.GoodHeightInterval.Start && it.Height <= filter.GoodHeightInterval.End);
                    }
                    if (filter.GoodHeightInterval.End.HasValue && !filter.GoodHeightInterval.Start.HasValue)
                    {
                        query = query.Where(it => it.Height >= 0 && it.Height <= filter.GoodHeightInterval.End);
                    }
                    if (filter.GoodHeightInterval.Start.HasValue && !filter.GoodHeightInterval.End.HasValue)
                    {
                        query = query.Where(it => it.Height >= filter.GoodHeightInterval.Start);
                    }
                }
                if (filter.GoodWidthInterval != null && (filter.GoodWidthInterval.End.HasValue || filter.GoodWidthInterval.Start.HasValue))
                {
                    if (filter.GoodWidthInterval.Start.HasValue && filter.GoodWidthInterval.End.HasValue)
                    {
                        query = query.Where(it => it.Width >= filter.GoodWidthInterval.Start && it.Width <= filter.GoodWidthInterval.End);
                    }
                    if (filter.GoodWidthInterval.End.HasValue && !filter.GoodWidthInterval.Start.HasValue)
                    {
                        query = query.Where(it => it.Width >= 0 && it.Width <= filter.GoodWidthInterval.End);
                    }
                    if (filter.GoodWidthInterval.Start.HasValue && !filter.GoodWidthInterval.End.HasValue)
                    {
                        query = query.Where(it => it.Width >= filter.GoodWidthInterval.Start);
                    }
                }
                if (filter.DateCreatedInterval?.Start != null)
                {
                    query = query.Where(it => it.DateCreated >= filter.DateCreatedInterval.Start);
                }
                if (filter.DateCreatedInterval?.End != null)
                {
                    query = query.Where(it => it.DateCreated <= filter.DateCreatedInterval.End);
                }

                if (filter.GoodDepthInterval != null && (filter.GoodDepthInterval.End.HasValue || filter.GoodDepthInterval.Start.HasValue))
                {
                    if (filter.GoodDepthInterval.Start.HasValue && filter.GoodDepthInterval.End.HasValue)
                    {
                        query = query.Where(it => it.Depth >= filter.GoodDepthInterval.Start && it.Depth <= filter.GoodDepthInterval.End);
                    }
                    if (filter.GoodDepthInterval.End.HasValue && !filter.GoodDepthInterval.Start.HasValue)
                    {
                        query = query.Where(it => it.Depth >= 0 && it.Depth <= filter.GoodDepthInterval.End);
                    }
                    if (filter.GoodDepthInterval.Start.HasValue && !filter.GoodDepthInterval.End.HasValue)
                    {
                        query = query.Where(it => it.Depth >= filter.GoodDepthInterval.Start);
                    }
                }
                query = filter.Sord.Equals("desc", StringComparison.OrdinalIgnoreCase)
                    ? query.OrderByDescending(filter.Sidx)
                    : query.OrderBy(filter.Sidx);

                query = query.Skip(filter.Rows * (filter.Page - 1)).Take(filter.Rows).Distinct();
                //if (filter.GoodInitOptions.HasFlag(GoodInitOptions.InitSize))
                //    query.Include(it => it.Size);
                foreach (var good in query)
                {
                    _goodRepo.InitGood(good, filter.GoodInitOptions);
                }
                return(query);
            }
            catch (Exception ex)
            {
                LogEventManager.Logger.Error(ex.Message, ex);
                throw;
            }
        }
 public void GetGoods()
 {
     try
     {
         var options = CreateNewContextOptions(); using (var db = new PersonalStoreContext(options))
         {
             var repository =
                 new PersonalStoreRepository(db);
             StoreTestHelper.PopulateDefaultPersonalStoreData(db);
             IEnumerable <Good> result = null;
             var filter = new UserStoreGoodsFilter <int, int, int>()
             {
                 UserId  = 1,
                 StoreId = 1
             };
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 3);
             filter.GoodCategoryIds =
                 db.Set <GoodCategory>().Select(it => it.CategoryId).Distinct().ToList();
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 1);
             filter.GoodCategoryIds = null;
             filter.GoodTypeIds     =
                 db.Set <GoodType>().Select(it => it.TypeId).Distinct().ToList();
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 1);
             filter.GoodTypeIds     = null;
             filter.GoodDesignerIds =
                 db.Set <GoodDesigner>().Select(it => it.DesignerId).Distinct().ToList();
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 1);
             filter.GoodDesignerIds = null;
             filter.GoodColorIds    =
                 db.Set <GoodColor>().Select(it => it.ColorId).Distinct().ToList();
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 1);
             filter.GoodColorIds     = null;
             filter.GoodMaterialsIds =
                 db.Set <GoodMaterial>().Select(it => it.MaterialId).Distinct().ToList();
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 1);
             filter.GoodColorIds              = null;
             filter.GoodMaterialsIds          = null;
             filter.GoodDepthInterval.End     = 100;
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 3);
             filter.GoodDepthInterval.End     = null;
             filter.GoodDepthInterval.Start   = 20;
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 3);
             filter.GoodDepthInterval.End     = 100;
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 3);
             filter.GoodDepthInterval.Start   = null;
             filter.GoodDepthInterval.End     = null;
             filter.GoodHeightInterval.End    = 100;
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 3);
             filter.GoodHeightInterval.End    = null;
             filter.GoodHeightInterval.Start  = 20;
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 3);
             filter.GoodHeightInterval.End    = 100;
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 3);
             filter.GoodHeightInterval.End    = null;
             filter.GoodHeightInterval.Start  = null;
             filter.GoodWidthInterval.End     = 100;
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 3);
             filter.GoodWidthInterval.End     = null;
             filter.GoodWidthInterval.Start   = 20;
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 3);
             filter.GoodWidthInterval.End     = 100;
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 3);
             filter.GoodHeightInterval.Start  = 20;
             filter.GoodHeightInterval.End    = 100;
             filter.GoodDepthInterval.Start   = 20;
             filter.GoodDepthInterval.End     = 100;
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 3);
             filter.GoodCategoryIds =
                 db.Set <GoodCategory>().Select(it => it.CategoryId).Distinct().ToList();
             filter.GoodTypeIds =
                 db.Set <GoodType>().Select(it => it.TypeId).Distinct().ToList();
             filter.GoodDesignerIds =
                 db.Set <GoodDesigner>().Select(it => it.DesignerId).Distinct().ToList();
             filter.GoodColorIds =
                 db.Set <GoodColor>().Select(it => it.ColorId).Distinct().ToList();
             filter.GoodColorIds     = null;
             filter.GoodMaterialsIds =
                 db.Set <GoodMaterial>().Select(it => it.MaterialId).Distinct().ToList();
             Assert.DoesNotThrow(() => result = repository.GetGoods(filter));
             Assert.True(result != null && result.Any() && result.Count() == 1);
         }
     }
     catch (Exception ex)
     {
         LogEventManager.Logger.Error(ex);
         throw;
     }
 }