private ProductBagModel GetData(ProductCommandDescriptor descriptor)
        {
            IQueryable <Litium.Domain.Entities.ProductCatalog.Product> products = null;
            var bagModel = new ProductBagModel();

            if (descriptor is CategoryCommandDescriptor)
            {
                products             = GetDataByCategory(descriptor);
                bagModel.TypeRequest = RequestType.Category;
            }

            if (descriptor is ProductSetCommandDescriptor)
            {
                products = GetDataByProductSet(descriptor);
            }

            if (descriptor is SearchCommandDescriptor)
            {
                products             = GetDataByKeyWord((SearchCommandDescriptor)descriptor);
                bagModel.TypeRequest = RequestType.Search;
            }

            if (descriptor is BrandCommandDescriptor)
            {
                products             = FilterByBrand(products, (BrandCommandDescriptor)descriptor);
                bagModel.TypeRequest = RequestType.Category;
            }

            IList <ProductModel> productModels = products.ToList().ConvertAll(ConvertFrom);

            productModels = productModels.ApplyCampaigns();
            productModels = productModels.OrderByDescending(x => x.IsInCampaign).ThenBy(x => x.CampaignPrice).ToList();
            productModels = productModels.ApplyPaging(descriptor.Page, descriptor.PageSize);


            bagModel.Id       = descriptor.EnityId;
            bagModel.Products = productModels;

            if (descriptor.EnityId != Guid.Empty)
            {
                bagModel.Name = Repository.Data.Get <Category>(descriptor.EnityId).Name;
            }

            return(bagModel);
        }
 /// <summary>
 /// Uses for populating data on Public site
 /// </summary>
 /// <param name="descriptor"></param>
 /// <returns></returns>
 public ProductBagModel GetProducts(ProductCommandDescriptor descriptor)
 {
     return(GetData(descriptor));
 }
 private IQueryable <Litium.Domain.Entities.ProductCatalog.Product> GetDataByProductSet(ProductCommandDescriptor descriptor)
 {
     throw new NotImplementedException();
 }
        private IQueryable <Litium.Domain.Entities.ProductCatalog.Product> GetDataByCategory(ProductCommandDescriptor descriptor)
        {
            var childCategories = new List <Category>();
            var category        = Repository.Data.Get <Category>(descriptor.EnityId);

            childCategories = GetAllCategoryRecursively(category);

            if (childCategories == null)
            {
                return(new List <Litium.Domain.Entities.ProductCatalog.Product>().AsQueryable());
            }

            var joinedCollection = from child in childCategories join product in Repository.Data.Get <Litium.Domain.Entities.ProductCatalog.Product>().Where(x => x.Category != null && x.Published).All() on
                                   child.Id equals product.Category.Id
                                   select product;

            return(joinedCollection.AsQueryable());
        }
 private IQueryable<Litium.Domain.Entities.ProductCatalog.Product> GetDataByProductSet(ProductCommandDescriptor descriptor)
 {
     throw new NotImplementedException();
 }
        private IQueryable<Litium.Domain.Entities.ProductCatalog.Product> GetDataByCategory(ProductCommandDescriptor descriptor)
        {
            var childCategories = new List<Category>();
            var category = Repository.Data.Get<Category>(descriptor.EnityId);
            childCategories = GetAllCategoryRecursively(category);

            if(childCategories == null)
                return new List<Litium.Domain.Entities.ProductCatalog.Product>().AsQueryable();

            var joinedCollection = from child in childCategories join product in Repository.Data.Get<Litium.Domain.Entities.ProductCatalog.Product>().Where(x => x.Category != null && x.Published).All() on
                                                                     child.Id equals product.Category.Id
                                   select product;

            return joinedCollection.AsQueryable();
        }
        private ProductBagModel GetData(ProductCommandDescriptor descriptor)
        {
            IQueryable<Litium.Domain.Entities.ProductCatalog.Product> products = null;
            var bagModel = new ProductBagModel();

            if (descriptor is CategoryCommandDescriptor)
            {
                products = GetDataByCategory(descriptor);
                bagModel.TypeRequest = RequestType.Category;
            }

            if (descriptor is ProductSetCommandDescriptor)
                products = GetDataByProductSet(descriptor);

            if (descriptor is SearchCommandDescriptor)
            {
                products = GetDataByKeyWord((SearchCommandDescriptor)descriptor);
                bagModel.TypeRequest = RequestType.Search;
            }

            if (descriptor is BrandCommandDescriptor)
            {
                products = FilterByBrand(products, (BrandCommandDescriptor)descriptor);
                bagModel.TypeRequest = RequestType.Category;
            }

            IList<ProductModel> productModels = products.ToList().ConvertAll(ConvertFrom);
            productModels = productModels.ApplyCampaigns();
            productModels = productModels.OrderByDescending(x => x.IsInCampaign).ThenBy(x => x.CampaignPrice).ToList();
            productModels = productModels.ApplyPaging(descriptor.Page, descriptor.PageSize);

            bagModel.Id = descriptor.EnityId;
            bagModel.Products = productModels;

            if (descriptor.EnityId != Guid.Empty)
                bagModel.Name = Repository.Data.Get<Category>(descriptor.EnityId).Name;

            return bagModel;
        }
 /// <summary>
 /// Uses for populating data on Public site
 /// </summary>
 /// <param name="descriptor"></param>
 /// <returns></returns>
 public ProductBagModel GetProducts(ProductCommandDescriptor descriptor)
 {
     return GetData(descriptor);
 }