public virtual ProductDetailViewModel CreateDetailsViewModel() { ProductDetailViewModel productDetailViewModel = null; var currentProduct = Ucommerce.EntitiesV2.Product.FirstOrDefault(x => x.Guid == CatalogContext.CurrentProduct.Guid); if (currentProduct != null) { var imageService = ObjectFactory.Instance.Resolve <IImageService>(); var currentCategory = CatalogContext.CurrentCategory; string displayName = string.Empty; if (currentProduct.ParentProduct != null) { displayName = $"{currentProduct.ParentProduct.DisplayName()} "; } displayName += currentProduct.DisplayName(); var productPrice = CatalogLibrary.CalculatePrices(new List <Guid>() { currentProduct.Guid }).Items .FirstOrDefault(); decimal price = 0; decimal discount = 0; if (productPrice != null) { price = productPrice.PriceExclTax; discount = productPrice.DiscountExclTax; var currentCatalog = CatalogContext.CurrentCatalog; if (currentCatalog != null && currentCatalog.ShowPricesIncludingTax) { price = productPrice.PriceInclTax; discount = productPrice.DiscountInclTax; } } var imageUrl = imageService.GetImage(currentProduct.PrimaryImageMediaId).Url; var absoluteImageUrl = UrlPath.ResolveAbsoluteUrl(imageUrl); var definition = currentProduct.ProductDefinition; var isProductFamily = definition.IsProductFamily(); productDetailViewModel = new ProductDetailViewModel() { DisplayName = displayName, Guid = currentProduct.Guid, PrimaryImageMediaUrl = absoluteImageUrl, LongDescription = currentProduct.LongDescription(), ShortDescription = currentProduct.ShortDescription(), ProductUrl = UrlService.GetUrl(CatalogContext.CurrentCatalog, CatalogContext.CurrentProduct), Price = new Money(price, CatalogContext.CurrentPriceGroup.CurrencyISOCode).ToString(), Discount = discount > 0 ? new Money(discount, CatalogContext.CurrentPriceGroup.CurrencyISOCode).ToString() : "", Sku = currentProduct.Sku, Rating = Convert.ToInt32(Math.Round(currentProduct.Rating.GetValueOrDefault())), VariantSku = currentProduct.VariantSku, IsVariant = currentProduct.IsVariant, IsProductFamily = currentProduct.ProductDefinition.IsProductFamily(), AllowOrdering = currentProduct.AllowOrdering, IsSellableProduct = !isProductFamily || currentProduct.Variants.Any() }; if (currentProduct.ParentProduct != null) { var parentProduct = CatalogLibrary.GetProduct(currentProduct.ParentProduct.Sku); productDetailViewModel.ParentProductUrl = UrlService.GetUrl(CatalogContext.CurrentCatalog, parentProduct); productDetailViewModel.ParentProductDisplayName = currentProduct.ParentProduct.DisplayName(); } if (currentCategory != null) { productDetailViewModel.CategoryDisplayName = currentCategory.DisplayName; productDetailViewModel.CategoryUrl = UrlService.GetUrl(CatalogContext.CurrentCatalog, CatalogContext.CurrentCategories.Append(CatalogContext.CurrentCategory).Compact(), CatalogContext.CurrentProduct); productDetailViewModel.ProductUrl = UrlService.GetUrl(CatalogContext.CurrentCatalog, CatalogContext.CurrentProduct); } var invariantFields = currentProduct.ProductProperties; var localizationContext = ObjectFactory.Instance.Resolve <ILocalizationContext>(); var fieldsForCurrentLanguage = currentProduct.GetProperties(localizationContext.CurrentCultureCode).ToList(); productDetailViewModel.ProductProperties = invariantFields.Concat(fieldsForCurrentLanguage).ToList(); var uniqueVariants = from v in currentProduct.Variants.SelectMany(p => p.ProductProperties) where v.ProductDefinitionField.DisplayOnSite group v by v.ProductDefinitionField into g select g; foreach (var vt in uniqueVariants) { var typeViewModel = productDetailViewModel.VariantTypes .Where(z => z.Id == vt.Key.ProductDefinitionFieldId) .FirstOrDefault(); if (typeViewModel == null) { typeViewModel = new VariantTypeViewModel { Id = vt.Key.ProductDefinitionFieldId, Name = vt.Key.Name, DisplayName = vt.Key.GetDisplayName() }; productDetailViewModel.VariantTypes.Add(typeViewModel); } var variants = vt.ToList(); foreach (var variant in variants) { var variantViewModel = typeViewModel.Values .Where(v => v.Value == variant.Value) .FirstOrDefault(); if (variantViewModel == null) { variantViewModel = new VariantViewModel { Value = variant.Value, TypeName = typeViewModel.Name }; if (!string.IsNullOrEmpty(variant.Product.PrimaryImageMediaId)) { var variantImageUrl = imageService.GetImage(variant.Product.PrimaryImageMediaId).Url; variantViewModel.PrimaryImageMediaUrl = UrlPath.ResolveAbsoluteUrl(variantImageUrl); } typeViewModel.Values.Add(variantViewModel); } } } productDetailViewModel.Routes.Add(RouteConstants.ADD_TO_BASKET_ROUTE_NAME, RouteConstants.ADD_TO_BASKET_ROUTE_VALUE); } return(productDetailViewModel); }
public virtual ProductDetailViewModel CreateDetailsViewModel() { ProductDetailViewModel productDetailViewModel = null; var currentProduct = SiteContext.Current.CatalogContext.CurrentProduct; if (currentProduct != null) { var imageService = UCommerce.Infrastructure.ObjectFactory.Instance.Resolve <IImageService>(); var currentCategory = SiteContext.Current.CatalogContext.CurrentCategory; string displayName = string.Empty; if (currentProduct.ParentProduct != null) { displayName = $"{currentProduct.ParentProduct.DisplayName()} "; } displayName += currentProduct.DisplayName(); var productPrice = CatalogLibrary.CalculatePrice(new List <Product>() { currentProduct }).Items.FirstOrDefault(); decimal price = 0; decimal discount = 0; if (productPrice != null) { price = productPrice.PriceExclTax; discount = productPrice.DiscountExclTax; var currentCatalog = SiteContext.Current.CatalogContext.CurrentCatalog; if (currentCatalog != null && currentCatalog.ShowPricesIncludingVAT) { price = productPrice.PriceInclTax; discount = productPrice.DiscountInclTax; } } var imageUrl = imageService.GetImage(currentProduct.PrimaryImageMediaId).Url; var absoluteImageUrl = UrlPath.ResolveAbsoluteUrl(imageUrl); productDetailViewModel = new ProductDetailViewModel() { DisplayName = displayName, Guid = currentProduct.Guid, PrimaryImageMediaUrl = absoluteImageUrl, LongDescription = currentProduct.LongDescription(), ShortDescription = currentProduct.ShortDescription(), ProductUrl = CatalogLibrary.GetNiceUrlForProduct(currentProduct, currentCategory), Price = new Money(price, SiteContext.Current.CatalogContext.CurrentPriceGroup.Currency).ToString(), Discount = new Money(discount, SiteContext.Current.CatalogContext.CurrentPriceGroup.Currency).ToString(), Sku = currentProduct.Sku, Rating = Convert.ToInt32(Math.Round(currentProduct.Rating.GetValueOrDefault())), VariantSku = currentProduct.VariantSku, IsVariant = currentProduct.IsVariant, IsProductFamily = currentProduct.ProductDefinition.IsProductFamily(), AllowOrdering = currentProduct.AllowOrdering, }; if (currentProduct.ParentProduct != null) { productDetailViewModel.ParentProductUrl = CatalogLibrary.GetNiceUrlForProduct(currentProduct.ParentProduct, currentCategory); productDetailViewModel.ParentProductDisplayName = currentProduct.ParentProduct.DisplayName(); } if (currentCategory != null) { productDetailViewModel.CategoryDisplayName = currentCategory.DisplayName(); productDetailViewModel.CategoryUrl = CatalogLibrary.GetNiceUrlForCategory(currentCategory); productDetailViewModel.ProductUrl = CatalogLibrary.GetNiceUrlForProduct(currentProduct, currentCategory); } foreach (var pv in currentProduct.Variants) { foreach (var v in pv.ProductProperties) { if (v.ProductDefinitionField != null && v.ProductDefinitionField.IsVariantProperty) { if (productDetailViewModel.VariantTypes.Any(t => t.Id == v.ProductDefinitionField.Id)) { } } } } var uniqueVariants = from v in currentProduct.Variants.SelectMany(p => p.ProductProperties) where v.ProductDefinitionField.DisplayOnSite group v by v.ProductDefinitionField into g select g; foreach (var vt in uniqueVariants) { var typeViewModel = productDetailViewModel.VariantTypes .Where(z => z.Id == vt.Key.ProductDefinitionFieldId) .FirstOrDefault(); if (typeViewModel == null) { typeViewModel = new VariantTypeViewModel { Id = vt.Key.ProductDefinitionFieldId, Name = vt.Key.Name, DisplayName = vt.Key.GetDisplayName() }; productDetailViewModel.VariantTypes.Add(typeViewModel); } var variants = vt.ToList(); foreach (var variant in variants) { var variantViewModel = typeViewModel.Values .Where(v => v.Value == variant.Value) .FirstOrDefault(); if (variantViewModel == null) { variantViewModel = new VariantViewModel { Value = variant.Value, TypeName = typeViewModel.Name }; if (!string.IsNullOrEmpty(variant.Product.PrimaryImageMediaId)) { var variantImageUrl = imageService.GetImage(variant.Product.PrimaryImageMediaId).Url; variantViewModel.PrimaryImageMediaUrl = UrlPath.ResolveAbsoluteUrl(variantImageUrl); } typeViewModel.Values.Add(variantViewModel); } } } productDetailViewModel.Routes.Add(RouteConstants.ADD_TO_BASKET_ROUTE_NAME, RouteConstants.ADD_TO_BASKET_ROUTE_VALUE); } return(productDetailViewModel); }