Ejemplo n.º 1
0
        public ProductCategoryPageDTO GetSearcedProducts(string searchKey)
        {
            IEnumerable <Product> products = _dbContext.Products.Include(p => p.Page).Include(p => p.MainImage)
                                             .Where(p => p.Name.Contains(searchKey));

            //IEnumerable<Product> products = _dbContext.Products.Include(p => p.Page).Include(p => p.MainImage)
            //    .Where(p => EF.Functions.Like(p.Name, "") );

            if (!products.Any())
            {
                return(new ProductCategoryPageDTO());
            }

            IMapper mapper = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <Product, ProductPageDTO>()
                .ForMember(prodDTO => prodDTO.Alias, opt => opt.MapFrom(prod => prod.Page.Alias));
                cfg.CreateMap <Image, ImageDTO>();
            }).CreateMapper();

            IEnumerable <ProductPageDTO> productsDTO = mapper.Map <IEnumerable <ProductPageDTO> >(products);

            ProductCategoryPageDTO searchedProductsPage = new ProductCategoryPageDTO
            {
                Products = productsDTO,
                Title    = "Поиск",
                Name     = $"Найденные товары по запросу: {searchKey}"
            };

            return(searchedProductsPage);
        }
Ejemplo n.º 2
0
        public ProductCategoryPageDTO GetProductCategoryPage(string categoryAlias, int pageNumber, int pageSize, ProductOrderType orderType)
        {
            Expression <Func <Product, object> > orderExp;

            switch (orderType)
            {
            case ProductOrderType.Name:
                orderExp = p => p.Name;
                break;

            case ProductOrderType.Price:
                orderExp = p => p.Price;
                break;

            default:
                orderExp = p => p.Name;
                break;
            }

            ProductCategory productCategory = _dbContext.ProductCategories.Include(pc => pc.Page)
                                              .FirstOrDefault(pc => pc.Page.Alias == categoryAlias);

            if (productCategory == null || productCategory.Page == null)
            {
                return(null);
            }

            //выполняется в отдельном зпросе так как невозможно сортировать и выборочно получать продукты в запросе, получающем категорию товаров
            IEnumerable <Product> products = _dbContext.Entry(productCategory).Collection(pc => pc.ProductToCategories).Query()
                                             .Include(ptc => ptc.Product).ThenInclude(p => p.MainImage).Include(ptc => ptc.Product).ThenInclude(p => p.Page)
                                             .Select(ptc => ptc.Product).OrderBy(orderExp).Skip((pageNumber - 1) * pageSize).Take(pageSize);

            IMapper categoryMapper = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <ProductCategory, ProductCategoryPageDTO>()
                .ForMember(catDTO => catDTO.Alias, opt => opt.MapFrom(cat => cat.Page.Alias))
                .ForMember(catDTO => catDTO.Description, opt => opt.MapFrom(cat => cat.Page.Description))
                .ForMember(catDTO => catDTO.Title, opt => opt.MapFrom(cat => cat.Page.Title));
            }).CreateMapper();

            IMapper productMapper = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <Product, ProductPageDTO>()
                .ForMember(prodDTO => prodDTO.Alias, opt => opt.MapFrom(prod => prod.Page.Alias));
                cfg.CreateMap <Image, ImageDTO>();
            }).CreateMapper();

            ProductCategoryPageDTO       productCategoryDTO = categoryMapper.Map <ProductCategoryPageDTO>(productCategory);
            IEnumerable <ProductPageDTO> productsDTO        = productMapper.Map <IEnumerable <ProductPageDTO> >(products);

            productCategoryDTO.Products   = productsDTO;
            productCategoryDTO.TotalItems = _dbContext.Entry(productCategory).Collection(pc => pc.ProductToCategories).Query().Count();

            return(productCategoryDTO);
        }
Ejemplo n.º 3
0
        public ProductCategoryPageDTO GetDiscountProductPage(int pageNumber, int pageSize, ProductOrderType orderType)
        {
            Expression <Func <Product, object> > orderExp;

            switch (orderType)
            {
            case ProductOrderType.Name:
                orderExp = p => p.Name;
                break;

            case ProductOrderType.Price:
                orderExp = p => p.Price;
                break;

            default:
                orderExp = p => p.Name;
                break;
            }

            IEnumerable <Product> products = _dbContext.Products.Include(p => p.Page).Include(p => p.MainImage)
                                             .OrderBy(orderExp).Where(p => p.DiscountPrice > 0).Skip((pageNumber - 1) * pageSize).Take(pageSize);

            if (!products.Any())
            {
                return(new ProductCategoryPageDTO());
            }

            IMapper mapper = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <Product, ProductPageDTO>()
                .ForMember(prodDTO => prodDTO.Alias, opt => opt.MapFrom(prod => prod.Page.Alias));
                cfg.CreateMap <Image, ImageDTO>();
            }).CreateMapper();

            IEnumerable <ProductPageDTO> productsDTO = mapper.Map <IEnumerable <ProductPageDTO> >(products);

            ProductCategoryPageDTO discountPage = new ProductCategoryPageDTO
            {
                Products = productsDTO,
                Title    = "Товары со скидкой",
                Name     = "Товары со скидкой"
            };

            discountPage.TotalItems = _dbContext.Products.Count(p => p.DiscountPrice > 0);

            return(discountPage);
        }
Ejemplo n.º 4
0
        public ActionResult List(string categoryAlias, int page = 1)
        {
            ProductCategoryPageDTO productCategoryPageDTO = _productService.GetProductCategoryPage(categoryAlias, page, _pageSize, ProductOrderType.Name);

            if (productCategoryPageDTO == null)
            {
                return(NotFound());
            }

            IMapper mapper = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <ProductCategoryPageDTO, ProductListPageViewModel>();
                cfg.CreateMap <ProductPageDTO, ProductPageViewModel>();
                cfg.CreateMap <ImageDTO, ImageViewModel>();
            }).CreateMapper();
            ProductListPageViewModel model = mapper.Map <ProductListPageViewModel>(productCategoryPageDTO);

            PagingInfo pagingInfo = new PagingInfo
            {
                CurrentPage  = page,
                ItemsPerPage = _pageSize,
                TotalItems   = productCategoryPageDTO.TotalItems,
                PageAction   = "List"
            };

            if (_siteSettings.TryGetValue("BigBannerId", out string bannerIdString))
            {
                if (int.TryParse(bannerIdString, out int singleBannerId))
                {
                    BannerDTO bannerDTO = _bannerService.GetBanner(singleBannerId);

                    IMapper bannerMapper = new MapperConfiguration(cfg =>
                    {
                        cfg.CreateMap <BannerDTO, BannerViewModel>();
                        cfg.CreateMap <ImageDTO, ImageViewModel>();
                    }).CreateMapper();
                    BannerViewModel banner = bannerMapper.Map <BannerViewModel>(bannerDTO);
                    ViewBag.SingleBanner = banner;
                }
            }

            model.PagingInfo = pagingInfo;
            ViewBag.Title    = model.Title;

            return(View(model));
        }
Ejemplo n.º 5
0
        public ActionResult Search(string search)
        {
            ProductCategoryPageDTO productCategoryPageDTO = _productService.GetSearcedProducts(search);

            if (productCategoryPageDTO == null)
            {
                return(NotFound());
            }

            IMapper mapper = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <ProductCategoryPageDTO, ProductListPageViewModel>();
                cfg.CreateMap <ProductPageDTO, ProductPageViewModel>();
                cfg.CreateMap <ImageDTO, ImageViewModel>();
            }).CreateMapper();
            ProductListPageViewModel model = mapper.Map <ProductListPageViewModel>(productCategoryPageDTO);

            if (_siteSettings.TryGetValue("BigBannerId", out string bannerIdString))
            {
                if (int.TryParse(bannerIdString, out int singleBannerId))
                {
                    BannerDTO bannerDTO = _bannerService.GetBanner(singleBannerId);

                    IMapper bannerMapper = new MapperConfiguration(cfg =>
                    {
                        cfg.CreateMap <BannerDTO, BannerViewModel>();
                        cfg.CreateMap <ImageDTO, ImageViewModel>();
                    }).CreateMapper();
                    BannerViewModel banner = bannerMapper.Map <BannerViewModel>(bannerDTO);
                    ViewBag.SingleBanner = banner;
                }
            }

            ViewBag.Title = model.Title;
            return(View("List", model));
        }