public async Task <IActionResult> ProductOverview(long id) { var product = await _productRepository.Query() .Include(x => x.OptionValues) .Include(x => x.ProductLinks).ThenInclude(p => p.LinkedProduct) .Include(x => x.ThumbnailImage) .Include(x => x.Medias).ThenInclude(m => m.Media) .FirstOrDefaultAsync(x => x.Id == id && x.IsPublished); if (product == null) { return(NotFound()); } var model = new ProductDetail { Id = product.Id, Name = _contentLocalizationService.GetLocalizedProperty(product, nameof(product.Name), product.Name), CalculatedProductPrice = _productPricingService.CalculateProductPrice(product), IsCallForPricing = product.IsCallForPricing, IsAllowToOrder = product.IsAllowToOrder, StockTrackingIsEnabled = product.StockTrackingIsEnabled, StockQuantity = product.StockQuantity, ShortDescription = _contentLocalizationService.GetLocalizedProperty(product, nameof(product.ShortDescription), product.ShortDescription), ReviewsCount = product.ReviewsCount, RatingAverage = product.RatingAverage, }; MapProductVariantToProductVm(product, model); MapProductOptionToProductVm(product, model); MapProductImagesToProductVm(product, model); return(PartialView(model)); }
private IList <BreadcrumbViewModel> Create(long categoryId) { var category = _categoryRepository .Query() .Include(x => x.Parent) .FirstOrDefault(x => x.Id == categoryId); var breadcrumbModels = new List <BreadcrumbViewModel> { new BreadcrumbViewModel { Text = _contentLocalizationService.GetLocalizedProperty(category, nameof(category.Name), category.Name), Url = category.Slug } }; var parentCategory = category.Parent; while (parentCategory != null) { breadcrumbModels.Insert(0, new BreadcrumbViewModel { Text = _contentLocalizationService.GetLocalizedProperty(parentCategory, nameof(parentCategory.Name), parentCategory.Name), Url = parentCategory.Slug }); parentCategory = parentCategory.Parent; } return(breadcrumbModels); }
public IViewComponentResult Invoke(WidgetInstanceViewModel widgetInstance) { var model = new SimpleProductWidgetComponentVm { Id = widgetInstance.Id, WidgetName = _contentLocalizationService.GetLocalizedProperty(nameof(WidgetInstance), widgetInstance.Id, nameof(widgetInstance.Name), widgetInstance.Name), Setting = JsonConvert.DeserializeObject <SimpleProductWidgetSetting>(widgetInstance.Data) }; foreach (var item in model.Setting.Products) { var product = _productRepository.Query().Where(x => x.Id == item.Id).Include(x => x.ThumbnailImage).FirstOrDefault(); if (product != null) { var productThumbnail = ProductThumbnail.FromProduct(product); productThumbnail.Name = _contentLocalizationService.GetLocalizedProperty(nameof(Product), productThumbnail.Id, nameof(product.Name), productThumbnail.Name); productThumbnail.ThumbnailUrl = _mediaService.GetThumbnailUrl(product.ThumbnailImage); productThumbnail.CalculatedProductPrice = _productPricingService.CalculateProductPrice(product); model.Products.Add(productThumbnail); } } return(View(this.GetViewPath(), model)); }
public IViewComponentResult Invoke(WidgetInstanceViewModel widgetInstance) { var model = new ProductWidgetComponentVm { Id = widgetInstance.Id, WidgetName = _contentLocalizationService.GetLocalizedProperty(nameof(WidgetInstance), widgetInstance.Id, nameof(widgetInstance.Name), widgetInstance.Name), Setting = JsonConvert.DeserializeObject <ProductWidgetSetting>(widgetInstance.Data) }; var query = _productRepository.Query() .Where(x => x.IsPublished && x.IsVisibleIndividually); if (model.Setting.CategoryId.HasValue && model.Setting.CategoryId.Value > 0) { query = query.Where(x => x.Categories.Any(c => c.CategoryId == model.Setting.CategoryId.Value)); } if (model.Setting.FeaturedOnly) { query = query.Where(x => x.IsFeatured); } if (model.Setting.OrderBy == ProductWidgetOrderBy.Newest) { query = query.OrderByDescending(p => p.CreatedOn); } if (model.Setting.OrderBy == ProductWidgetOrderBy.BestSelling) { //TODO: ProductWidgetOrderBy.BestSelling must be managed // create a new property in product incremented each time a product // is created or updated or calculated how many time the products already // ordered ? } var productThumbnail = query .Include(x => x.ThumbnailImage) .Select(x => ProductThumbnail.FromProduct(x)); if (model.Setting.OrderBy == ProductWidgetOrderBy.Discount) { model.Products = model.Products.OrderByDescending(p => p.CalculatedProductPrice.PercentOfSaving).ToList(); } model.Products = productThumbnail.Take(model.Setting.NumberOfProducts).ToList(); foreach (var product in model.Products) { product.Name = _contentLocalizationService.GetLocalizedProperty(nameof(Product), product.Id, nameof(product.Name), product.Name); product.ThumbnailUrl = _mediaService.GetThumbnailUrl(product.ThumbnailImage); product.CalculatedProductPrice = _productPricingService.CalculateProductPrice(product); } return(View(this.GetViewPath(), model)); }
public IViewComponentResult Invoke(WidgetInstanceViewModel widgetInstance) { var model = new SpaceBarWidgetComponentVm { Id = widgetInstance.Id, WidgetName = _contentLocalizationService.GetLocalizedProperty(nameof(WidgetInstance), widgetInstance.Id, nameof(widgetInstance.Name), widgetInstance.Name), Items = JsonConvert.DeserializeObject <List <SpaceBarWidgetSetting> >(widgetInstance.Data) }; foreach (var item in model.Items) { if (!string.IsNullOrWhiteSpace(item.Title)) { item.Title = _localizer[item.Title]; } if (!string.IsNullOrWhiteSpace(item.Description)) { item.Description = _localizer[item.Description]; } if (!string.IsNullOrEmpty(item.Image)) { item.ImageUrl = _mediaService.GetMediaUrl(item.Image); } } return(View(this.GetViewPath(), model)); }
public IViewComponentResult Invoke(WidgetInstanceViewModel widgetInstance) { var model = new CategoryWidgetComponentVm() { Id = widgetInstance.Id, WidgetName = _contentLocalizationService.GetLocalizedProperty(nameof(WidgetInstance), widgetInstance.Id, nameof(widgetInstance.Name), widgetInstance.Name), }; var settings = JsonConvert.DeserializeObject <CategoryWidgetSettings>(widgetInstance.Data); if (settings != null) { var category = _categoriesRepository.Query() .Include(c => c.ThumbnailImage) .FirstOrDefault(c => c.Id == settings.CategoryId); model.Category = new CategoryThumbnail() { Id = category.Id, Description = category.Description, Name = category.Name, Slug = category.Slug, ThumbnailImage = category.ThumbnailImage, ThumbnailUrl = _mediaService.GetThumbnailUrl(category.ThumbnailImage) }; } return(View(this.GetViewPath(), model)); }
public IActionResult PageDetail(long id) { var page = _pageRepository.Query().FirstOrDefault(x => x.Id == id); if (page == null) { return(NotFound()); } var model = new PageVm { Name = _contentLocalizationService.GetLocalizedProperty(page, nameof(page.Name), page.Name), Body = _contentLocalizationService.GetLocalizedProperty(page, nameof(page.Body), page.Body), MetaTitle = page.MetaTitle, MetaKeywords = page.MetaKeywords, MetaDescription = page.MetaDescription }; return(View(model)); }
public async Task <IActionResult> Index() { var currentUser = await _workContext.GetCurrentUser(); var comparingProducts = _comparingProductRepository.Query() .Include(x => x.Product).ThenInclude(p => p.ThumbnailImage) .Include(x => x.Product).ThenInclude(p => p.AttributeValues).ThenInclude(a => a.Attribute) .Where(x => x.UserId == currentUser.Id).ToList(); var allAttributes = new List <ProductAttribute>(); foreach (var item in comparingProducts) { allAttributes.AddRange(item.Product.AttributeValues.Select(x => x.Attribute)); } var model = new ProductComparisonVm(); model.Attributes = allAttributes.Distinct().Select(x => new AttributeVm { AttributeId = x.Id, Name = _contentLocalizationService.GetLocalizedProperty(x, nameof(x.Name), x.Name) }).ToList(); model.Products = comparingProducts.Select(x => new ComparingProductVm { ProductName = _contentLocalizationService.GetLocalizedProperty(x.Product, nameof(x.Product.Name), x.Product.Name), ProductImage = _mediaService.GetThumbnailUrl(x.Product.ThumbnailImage), CalculatedProductPrice = _productPricingService.CalculateProductPrice(x.Product), ProductId = x.ProductId, AttributeValues = x.Product.AttributeValues.Select(a => new AttributeValueVm { AttributeId = a.AttributeId, Value = _contentLocalizationService.GetLocalizedProperty(a, nameof(a.Value), a.Value) }) .ToList() }) .ToList(); return(View(model)); }
public IViewComponentResult Invoke(WidgetInstanceViewModel widgetInstance) { var model = new ProductWidgetComponentVm { Id = widgetInstance.Id, WidgetName = _contentLocalizationService.GetLocalizedProperty(nameof(WidgetInstance), widgetInstance.Id, nameof(widgetInstance.Name), widgetInstance.Name), Setting = JsonConvert.DeserializeObject <ProductWidgetSetting>(widgetInstance.Data) }; var query = _productRepository.Query() .Where(x => x.IsPublished && x.IsVisibleIndividually); if (model.Setting.CategoryId.HasValue && model.Setting.CategoryId.Value > 0) { query = query.Where(x => x.Categories.Any(c => c.CategoryId == model.Setting.CategoryId.Value)); } if (model.Setting.FeaturedOnly) { query = query.Where(x => x.IsFeatured); } model.Products = query .Include(x => x.ThumbnailImage) .OrderByDescending(x => x.CreatedOn) .Take(model.Setting.NumberOfProducts) .Select(x => ProductThumbnail.FromProduct(x)).ToList(); foreach (var product in model.Products) { product.Name = _contentLocalizationService.GetLocalizedProperty(nameof(Product), product.Id, nameof(product.Name), product.Name); product.ThumbnailUrl = _mediaService.GetThumbnailUrl(product.ThumbnailImage); product.CalculatedProductPrice = _productPricingService.CalculateProductPrice(product); } return(View(this.GetViewPath(), model)); }
private CategoryMenuItem Map(Category category) { var categoryMenuItem = new CategoryMenuItem { Id = category.Id, Name = _contentLocalizationService.GetLocalizedProperty(category, nameof(category.Name), category.Name), Slug = category.Slug }; var childCategories = category.Children; foreach (var childCategory in childCategories.OrderByDescending(x => x.DisplayOrder)) { var childCategoryMenuItem = Map(childCategory); categoryMenuItem.AddChildItem(childCategoryMenuItem); } return(categoryMenuItem); }
// TODO Number of items to config public async Task <IViewComponentResult> InvokeAsync(long?productId, int itemCount = 4) { var user = await _workContext.GetCurrentUser(); IQueryable <Product> query = _productRepository.GetRecentlyViewedProduct(user.Id) .Include(x => x.ThumbnailImage); if (productId.HasValue) { query = query.Where(x => x.Id != productId.Value); } var model = query.Take(itemCount) .Select(x => ProductThumbnail.FromProduct(x)).ToList(); foreach (var product in model) { product.Name = _contentLocalizationService.GetLocalizedProperty(nameof(Product), product.Id, nameof(product.Name), product.Name); product.ThumbnailUrl = _mediaService.GetThumbnailUrl(product.ThumbnailImage); product.CalculatedProductPrice = _productPricingService.CalculateProductPrice(product); } return(View(this.GetViewPath(), model)); }
public IActionResult BrandDetail(long id, SearchOption searchOption) { var brand = _brandRepository.Query().FirstOrDefault(x => x.Id == id); if (brand == null) { return(Redirect("~/Error/FindNotFound")); } var model = new ProductsByBrand { BrandId = id, BrandName = brand.Name, BrandSlug = brand.Slug, CurrentSearchOption = searchOption, FilterOption = new FilterOption() }; var query = _productRepository.Query().Where(x => x.BrandId == id && x.IsPublished && x.IsVisibleIndividually); if (query.Count() == 0) { model.TotalProduct = 0; return(View(model)); } AppendFilterOptionsToModel(model, query); if (searchOption.MinPrice.HasValue) { query = query.Where(x => x.Price >= searchOption.MinPrice.Value); } if (searchOption.MaxPrice.HasValue) { query = query.Where(x => x.Price <= searchOption.MaxPrice.Value); } var categories = searchOption.GetCategories().ToArray(); if (categories.Any()) { query = query.Where(x => x.Categories.Any(c => categories.Contains(c.Category.Slug))); } model.TotalProduct = query.Count(); var currentPageNum = searchOption.Page <= 0 ? 1 : searchOption.Page; var offset = (_pageSize * currentPageNum) - _pageSize; while (currentPageNum > 1 && offset >= model.TotalProduct) { currentPageNum--; offset = (_pageSize * currentPageNum) - _pageSize; } query = ApplySort(searchOption, query); var products = query .Include(x => x.ThumbnailImage) .Skip(offset) .Take(_pageSize) .Select(x => ProductThumbnail.FromProduct(x)) .ToList(); foreach (var product in products) { product.Name = _contentLocalizationService.GetLocalizedProperty(nameof(Product), product.Id, nameof(product.Name), product.Name); product.ThumbnailUrl = _mediaService.GetThumbnailUrl(product.ThumbnailImage); product.CalculatedProductPrice = _productPricingService.CalculateProductPrice(product); } model.Products = products; model.CurrentSearchOption.PageSize = _pageSize; model.CurrentSearchOption.Page = currentPageNum; return(View(model)); }
public IActionResult Index(SearchOption searchOption) { if (string.IsNullOrWhiteSpace(searchOption.Query)) { return(Redirect("~/")); } var brand = _brandRepository.Query().FirstOrDefault(x => x.Name == searchOption.Query && x.IsPublished); if (brand != null) { return(Redirect(string.Format("~/{0}", brand.Slug))); } var model = new SearchResult { CurrentSearchOption = searchOption, FilterOption = new FilterOption() }; var query = _productRepository.Query().Where(x => x.Name.Contains(searchOption.Query) && x.IsPublished && x.IsVisibleIndividually); if (!query.Any()) { model.TotalProduct = 0; return(View(model)); } AppendFilterOptionsToModel(model, query); if (searchOption.MinPrice.HasValue) { query = query.Where(x => x.Price >= searchOption.MinPrice.Value); } if (searchOption.MaxPrice.HasValue) { query = query.Where(x => x.Price <= searchOption.MaxPrice.Value); } if (string.Compare(model.CurrentSearchOption.Category, "all", StringComparison.OrdinalIgnoreCase) != 0) { var categories = searchOption.GetCategories(); if (categories.Any()) { var categoryIds = _categoryRepository.Query().Where(x => categories.Contains(x.Slug)).Select(x => x.Id).ToList(); query = query.Where(x => x.Categories.Any(c => categoryIds.Contains(c.CategoryId))); } } var brands = searchOption.GetBrands(); if (brands.Any()) { var brandIs = _brandRepository.Query().Where(x => brands.Contains(x.Slug)).Select(x => x.Id).ToList(); query = query.Where(x => x.BrandId.HasValue && brandIs.Contains(x.BrandId.Value)); } model.TotalProduct = query.Count(); var currentPageNum = searchOption.Page <= 0 ? 1 : searchOption.Page; var offset = (_pageSize * currentPageNum) - _pageSize; while (currentPageNum > 1 && offset >= model.TotalProduct) { currentPageNum--; offset = (_pageSize * currentPageNum) - _pageSize; } SaveSearchQuery(searchOption, model); query = query .Include(x => x.ThumbnailImage); query = AppySort(searchOption, query); var products = query .Select(x => ProductThumbnail.FromProduct(x)) .Skip(offset) .Take(_pageSize) .ToList(); foreach (var product in products) { product.Name = _contentLocalizationService.GetLocalizedProperty(nameof(Product), product.Id, nameof(product.Name), product.Name); product.ThumbnailUrl = _mediaService.GetThumbnailUrl(product.ThumbnailImage); product.CalculatedProductPrice = _productPricingService.CalculateProductPrice(product); } model.Products = products; model.CurrentSearchOption.PageSize = _pageSize; model.CurrentSearchOption.Page = currentPageNum; return(View(model)); }